通过django测试套件与django URL

时间:2017-06-08 14:51:04

标签: django python-2.7 python-unicode

具体而言,我使用webob库发布了类似问题(https://github.com/Pylons/webob/issues/320),因为我不确定它是否是我的用法,或者是错误/文档问题

请使用以下代码:

from webob.request import BaseRequest
req = BaseRequest.blank('http://example.com/%D0%B4%D1%8D%D0%BB%D1%8C%D1%8D%D0%BD%D0%B9%D1%82')
print req.environ['PATH_INFO']
print req.path

如果我通过django shell运行它,我得到:

>>> req = BaseRequest.blank('http://example.com/%D0%B4%D1%8D%D0%BB%D1%8C%D1%8D%D0%BD%D0%B9%D1%82')
>>> print req.environ['PATH_INFO']
/дэльэнйт
>>> print req.path
/%D0%B4%D1%8D%D0%BB%D1%8C%D1%8D%D0%BD%D0%B9%D1%82

在将其作为Django测试用例的一部分运行时,我从第一个打印中获得以下内容:

/дÑлÑÑнйÑ

其次是例外:

File "/code/frontend/tests/test_views.py", line 55, in test_event
    print req.path
File "/virtualenv/frontend/local/lib/python2.7/site-packages/webob/request.py", line 485, in path
    bpath = bytes_(self.path_info, self.url_encoding)
File "/virtualenv/frontend/local/lib/python2.7/site-packages/webob/descriptors.py", line 68, in fget
    return req.encget(key, encattr=encattr)
File "/virtualenv/frontend/local/lib/python2.7/site-packages/webob/request.py", line 175, in encget
    return val.decode(encoding)
File "/virtualenv/frontend/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-16: ordinal not in range(128)

我知道这可能是我测试套件的一些奇怪的配置,但是它们都在相同的环境中运行相同的方法(Django' s manage.py test vs manage.py shell)所以我&# 39;我努力找出与众不同之处。我们还会毫无问题地运行大量其他与unicode相关的测试。

感谢您对此有所了解。

1 个答案:

答案 0 :(得分:0)

您有两个选择:

  1. 使用日志记录代替打印它是所有(不仅是Django)应用程序中的最佳实践。
  2. 或使用req.path.decode(' utf-8')