2011-10-31 9 views

Respuesta

6

La respuesta no decide la URL, la solicitud sí lo hace.

La respuesta le proporciona el contenido de la respuesta, no su url.

+0

Pero si hay una redirección, la solicitud no sabe. –

+1

@Joseph Turian: claro que sí, está en el encabezado de referencia: 'request.META ['HTTP_REFERER']'. –

+0

@JosephTurian: la solicitud es para leer datos del cliente, la respuesta es para enviar datos al cliente. No puede decirle a un cliente en qué url está porque ya le dio esa información. Sin embargo, puede decirle al cliente que redirija a una página diferente. – Wolph

6

Esto es antiguo, pero me encontré con un problema similar al hacer pruebas unitarias. Así es como resolví el problema.

Puede usar el response.redirect_chain y/o el response.request['PATH_INFO'] para obtener las direcciones URL de redirección.

¡Echa un vistazo a la documentación también! Django Testing Tools: assertRedirects

from django.core.urlresolvers import reverse 
from django.test import TestCase 


class MyTest(TestCase) 
    def test_foo(self): 
     foo_path = reverse('foo') 
     bar_path = reverse('bar') 
     data = {'bar': 'baz'} 
     response = self.client.post(foo_path, data, follow=True) 
     # Get last redirect 
     self.assertGreater(len(response.redirect_chain), 0) 
     # last_url will be something like 'http://testserver/.../' 
     last_url, status_code = response.redirect_chain[-1] 
     self.assertIn(bar_path, last_url) 
     self.assertEqual(status_code, 302) 
     # Get the exact final path from the response, 
     # excluding server and get params. 
     last_path = response.request['PATH_INFO'] 
     self.assertEqual(bar_path, last_path) 
     # Note that you can also assert for redirects directly. 
     self.assertRedirects(response, bar_path) 
+0

Me encantaría saber para qué sirve el voto negativo. – pyrospade

+0

Llegué aquí tratando de descubrir la ruta de una respuesta. Pero no parece que 'HttpResponse' tenga un método llamado' request' o 'redirect_chain'. inversa funciona para obtener la url sin embargo. – Jonathan

+0

Olvidar el 'follow = True' es algo realmente malo. No lo hiciste, lo hice. https://code.djangoproject.com/ticket/10971 – aliteralmind

Cuestiones relacionadas