Джанго не может цитировать символы в URL? - PullRequest
1 голос
/ 31 декабря 2011

Я слежу за этой веткой и приму код для перца.Но когда я добавляю зашифрованные и заключенные в кавычки символы в URL и пытаюсь получить доступ к этому URL, Django завершился ошибкой со следующими ошибками:

Traceback (последний вызов был последним):

File "C: \ Python27 \ lib \ site-packages \ django \ core \ servers \ basehttp.py ", строка 283, в прогоне self.result = application (self.environ, self.start_response)

Файл" C: \ Python27 \ lib \ site-packages \ django \ contrib \ staticfiles \ handlers.py ", строка 68, в call return self.application (environment, start_response)

Файл" C: \ Python27 \ lib \ site-packages \ django \ core \ handlers \ wsgi.py ", строка 264, в call logger.warning ('Неверный запрос (UnicodeDecodeError):% s'% request.path,

UnboundLocalError: локальная переменная 'request', на которую ссылается перед присваиванием

Примерный URL такого типа: http://localhost:8000/customer/unsubscribe/%F1%CDE%A2%9DL%BF%21W%60%FF%04%D2%D2%3B%B1%FB%C9%8Ff%89%06O%FFY%E2_%16%9BnPM/. Я заметил, что до тех пор, пока% появляется в URL, Django бросил бы выше исключений. Это не имело особого смысла, так как символы в кавычках уже имеют нулевые юникоды.

Я использую Django 1.3.1

1 Ответ

0 голосов
/ 31 декабря 2011

Существует несколько билетов на Django, относящихся к этому вопросу https://code.djangoproject.com/ticket/16541 и https://code.djangoproject.com/ticket/5738. В частности Комментарий Малкольма на # 5738, приведенный ниже:

Проблема заключается в том, что, хотя в качестве кодировки для данных, не относящихся к ASCII, настоятельно рекомендуется использовать UTF-8, он фактически не кодифицирован ни в одной спецификации до самого недавнего времени (например, RFC 2396 оставляет вещи широко открытыми).Только в RFC 3986 все стало ясно для кодирования IRI в URI.

Тем временем были развернуты системы, которые выплевывают URI, не кодированные в UTF-8.

Итак, я собираюсьзафиксировать изменение, которое передает ответ 400 для некорректного ввода (не-UTF-8), но также облегчает переопределение класса запроса, поэтому, если кто-то имеет дело с устаревшей системой, он может создать подкласс WSGIRequestor или ModPythonRequest для обработки декодированияURI, однако они должны.

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