Ich habe einige Probleme beim Ausführen von Cartridge-Tests - der Test-Client gibt immer 301 zurück, wenn etwas wie self.client.get ('/') zu tun. Die einzige Möglichkeit, fortzufahren, ist Follow = True, aber es ist verdächtig, dass ich das immer tun muss. Dies bedeutet auch, dass ich POST nicht testen kann, da die test client always uses GET for redirects.Django-Test-Client immer zurück 301
Ich habe die Cartridge an einigen Stellen modifiziert, also ist das definitiv meine Schuld, aber ich bin mir nicht sicher, wie ich es debuggen soll. Hier ist, was passiert:
>>> 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': []}
Und mit folgenden Umleitungen:
>>> 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/'
Auch wenn ich versuche, direkt an die angegebene URL zu gehen:
>>> response = self.client.get('http://example.com/en/', follow=True)
>>> response.redirect_chain
[('http://example.com/en/', 301)]
wo 'example.com' ist nur Die Seiten leben URL. Hast du irgendwelche Ideen, warum das passieren könnte? Ist es normal, dass es auf example.com umleitet (oder zumindest vorgibt, es scheint immer noch lokal zu laufen) anstatt auf localhost?
Ich bekam unerklärlicherweise eine 301 PermanentRedirect beim Testen meiner Django-Ansichten und hatte keine Ideen mehr. Ihre Frage und Antwort hat mir gezeigt, dass die SSL-Einstellungen eine Weiterleitung erzeugen. – Andres
Ich auch, ich hatte eine SSL-Middleware-Einstellung, die den Statuscode 301 verursacht. Hätte wahrscheinlich viel Zeit ohne deine Ahnung gekostet. Vielen Dank! – Bentley4
Das gleiche für mich mit django-sslify. Benötigt 'von django.test.utils import override_settings' und den Dekorator' @override_settings (SSLIFY_DISABLE = True) 'auf meiner' TestCase' Klasse. Funktioniert für Django 1.4+ – dghubble