django测试客户端总是返回301

Mac*_*yka 10 django django-testing mezzanine cartridge

我在运行盒式磁带测试时遇到了一些问题 - 测试客户端在执行self.client.get('/')之类的操作时总是返回301.唯一的方法是添加follow = True,但我总是必须这样做.这也意味着我无法测试POST,因为测试客户端总是使用GET进行重定向.

我在几个地方修改了墨盒,所以这绝对是我的错,但我不知道如何调试它.这是发生的事情:

>>> response = self.client.get('/en/')
>>> response.status_code
301
>>> pp response.__dict__
{'_base_content_is_iter': False,
 '_charset': 'utf-8',
 '_closable_objects': [],
 '_container': [u''],
 '_handler_class': None,
 '_headers': {'content-language': ('Content-Language', 'en'),
              'content-type': ('Content-Type', 'text/html; charset=utf-8'),
              'location': ('Location', 'http://example.com/en/'),
              'vary': ('Vary', 'Accept-Language, Cookie')},
 'client': <django.test.client.Client object at 0x1105364d0>,
 'context': None,
 'cookies': <SimpleCookie: >,
 'request': {u'CONTENT_TYPE': 'text/html; charset=utf-8',
             u'PATH_INFO': '/en/',
             u'QUERY_STRING': '',
             u'REQUEST_METHOD': 'GET'},
 'templates': []}
Run Code Online (Sandbox Code Playgroud)

并通过以下重定向:

>>> response = self.client.get('/en/', follow=True)
>>> response.status_code
200
>>> response.redirect_chain
[('http://example.com/en/', 301)]

>>> response = self.client.get('http://example.com/en/')
>>> response.status_code
301
>>> response['Location']
'http://example.com/en/'
Run Code Online (Sandbox Code Playgroud)

即使我尝试直接转到给定的网址:

>>> response = self.client.get('http://example.com/en/', follow=True)
>>> response.redirect_chain
[('http://example.com/en/', 301)]
Run Code Online (Sandbox Code Playgroud)

其中'example.com'只是网站的实时网址.你有什么想法可能会发生吗?重定向到example.com(或者至少假装,它似乎仍然在本地运行)而不是localhost是正常的吗?

Mac*_*yka 7

标准地说,我在写这个问题时已经找到了答案...希望这对其他人有用!

不知何故,SSL配置进入我的开发设置.特别是我有以下内容

SSL_FORCE_HOST = 'example.com'
Run Code Online (Sandbox Code Playgroud)

启用,这似乎是一个问题 - 在开发中禁用它后,问题就消失了.

  • 使用django-sslify对我来说也一样.需要`来自django.test.utils import override_settings`并在我的`TestCase`类中使用装饰器`@override_settings(SSLIFY_DISABLE = True)`.适用于Django 1.4+ (4认同)
  • 在测试我的django视图时,我莫名其妙地获得了301 PermanentRedirect,并且已经没有想法了.您的问题和答案让我意识到SSL设置正在产生重定向. (3认同)