我正在关注this thread并采用了胡椒种植者的代码。但是,当我将加密和引用的字符添加到URL并尝试访问此URL时,Django失败并出现以下错误:
追踪(最近一次呼叫最后一次):
文件 “C:\ Python27 \ lib \ site-packages \ django \ core \ servers \ basehttp.py”,line 283,在奔跑 self.result = application(self.environ,self.start_response)
文件 “C:\ Python27 \ LIB \站点包\ Django的\的contrib \ staticfiles \ handlers.py” 第68行,在通话中 return self.application(environ,start_response)
文件“C:\ Python27 \ lib \ site-packages \ django \ core \ handlers \ wsgi.py”, 第264行,在通话中 logger.warning('错误请求(UnicodeDecodeError):%s'%request.path,
UnboundLocalError:之前引用的局部变量'request' 分配
此类示例网址为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就会抛出异常。它没有多大意义,因为引用的字符已经有零个unicodes。
我正在使用Django 1.3.1
答案 0 :(得分:0)
有一些与此问题相关的Django门票https://code.djangoproject.com/ticket/16541和https://code.djangoproject.com/ticket/5738。特别是#5738上的Malcolm's comment,部分如下:
问题是虽然强烈建议使用UTF-8作为 对于非ASCII数据的编码,它实际上并没有编入任何规范 直到最近(例如,RFC 2396使事情敞开大门)。 只有在RFC 3986中,IRI才能清楚地进行URI编码。
在此期间,系统部署了吐出非UTF-8编码的系统 的URI。
所以我要提交一个更改,传回400响应 格式错误的输入(非UTF-8),但也更容易覆盖 请求类,所以如果有人正在处理遗留系统,他们 可以继承WSGIRequestor或ModPythonRequest来处理解码 但是他们需要URI。