Я столкнулся с некоторыми проблемами при выполнении тестов картриджей — тестовый клиент всегда возвращает 301 при выполнении чего-то вроде self.client.get('/'). Единственный способ продолжить — добавить 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': []}
И со следующими переадресациями:
>>> 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/'
Даже когда я пытаюсь перейти непосредственно к данному URL-адресу:
>>> response = self.client.get('http://example.com/en/', follow=True)
>>> response.redirect_chain
[('http://example.com/en/', 301)]
где «example.com» — это просто активный URL-адрес сайта. У вас есть идеи, почему это может происходить? Это нормально, что он перенаправляет на example.com (или, по крайней мере, делает вид, что все еще работает локально) вместо localhost?
from django.test.utils import override_settings
и использовать декоратор@override_settings(SSLIFY_DISABLE=True)
в моем классеTestCase
. Работает для Джанго 1.4+ 31.12.2013if bool(int(os.getenv("IN_PRODUCTION", 1))) == 1: MIDDLEWARE_CLASSES = tuple(['sslify.middleware.SSLifyMiddleware'] + list(MIDDLEWARE_CLASSES))
02.01.2014