Django不能在网址中引用字符?

时间:2011-12-30 23:47:52

标签: python django

我正在关注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

1 个答案:

答案 0 :(得分:0)

有一些与此问题相关的Django门票https://code.djangoproject.com/ticket/16541https://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。