Невозможно сохранить URI данных в базу данных без символов + - PullRequest
3 голосов
/ 08 апреля 2010

Я пытаюсь получить ссылку на изображения с src в схеме URI. Примером могут служить изображения на google.com/news.

.

если я предупреждаю (escape (saveObj.image)); Я получаю что-то вроде ниже:

data%3Aimage/jpeg%3Bbase64%2C/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABQAFADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAABgIDBAUHAQAI/8QAPhAAAgECBAMFBgIGCwEAAAAAAQIDBBEABRIhEzFhBkFRcYEUIjKRobFCwRUjJFKC0QcWJSZiY3Jzg7Lw4f/EABoBAAIDAQEAAAAAAAAAAAAAAAMEAAIFBgH/xAAmEQABBAEEAQMFAAAAAAAAAAABAAIDESEEEjFBBRMisVFhcZGh/9oADAMBAAIRAxEAPwAr7L5pD2gyY5JXEtLGAFY/EU2sR1U2+nXF/pZFKuffViGPW5ximQUEz1cNdPNKms6g8TlWBufDcHyxsdLUmqoYqhiWZ1BYtsSe+/

Я передаю это из файла js и использую django, чтобы получить его в таблицу mysql типа utf8_unicode_ci с помощью modelform.save, но когда я проверяю, что находится в базе данных, я вижу:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABQAFADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAABgIDBAUHAQAI/8QAPhAAAgECBAMFBgIGCwEAAAAAAQIDBBEABRIhEzFhBkFRcYEUIjKRobFCwRUjJFKC0QcWJSZiY3Jzg7Lw4f/EABoBAAIDAQEAAAAAAAAAAAAAAAMEAAIFBgH/xAAmEQABBAEEAQMFAAAAAAAAAAABAAIDESEEEjFBBRMisVFhcZGh/9oADAMBAAIRAxEAPwAr7L5pD2gyY5JXEtLGAFY/EU2sR1U2 nXF/pZFKuffViGPW5ximQUEz1cNdPNKms6g8TlWBufDcHyxsdLUmqoYqhiWZ1BYtsSe 

Ключевое отличие состоит в том, что в моей базе данных все символы + из оригинала были удалены и заменены пробелами. Есть идеи? Я ослеп, пытаясь понять это! : P

Единственный javascript, который я выполняю на src перед передачей в веб-сервис через xmlhttprequest (POST, webservice, TRUE), это:

escape(image) where image = src of a google news image.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2010

Проблема в том, что URL-поля Django автоматически передаются методу urlsplit, который удаляет подобные вещи, поскольку + также означает пробел в URL.

Как вы можете видеть здесь , проверка URLField автоматически делает это. Таким образом, вы можете использовать CharField вместо этого или создать пользовательский URLField, например:

class CustomURLField(forms.URLField):
    def to_python(self, value):
        return value

Обратите внимание, что при этом вы больше не будете автоматически добавлять http.

0 голосов
/ 08 апреля 2010

Поскольку + в URL означает пробел, с пробелами все в порядке, если вы снова закодируете URL, прежде чем запросить его у сервера.Похоже, он также удаляет косую черту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...