2011-10-31 24 views
5

Giả sử tôi có đối tượng phản hồi Django.Cách tìm URL vị trí trong đối tượng phản hồi Django?

Tôi muốn tìm URL (vị trí). Tuy nhiên, tiêu đề phản hồi không thực sự chứa trường Vị trí hoặc Vị trí nội dung.

Làm cách nào để xác định, từ đối tượng phản hồi này, URL mà nó đang hiển thị?

+0

Bạn đang làm gì đó sai. –

Trả lời

6

Phản hồi không quyết định url, yêu cầu thực hiện.

Phản hồi cung cấp cho bạn nội dung phản hồi chứ không phải url của nó.

+0

Nhưng nếu có chuyển hướng, yêu cầu không biết. –

+1

@Joseph Turian: chắc chắn nó có, nó nằm trong tiêu đề liên kết giới thiệu: 'request.META ['HTTP_REFERER']'. –

+0

@JosephTurian: yêu cầu là để đọc dữ liệu từ máy khách, phản hồi là gửi dữ liệu cho khách hàng. Bạn không thể nói cho khách hàng biết url của anh ta là gì bởi vì anh ấy đã cung cấp cho bạn dữ liệu đó. Bạn có thể yêu cầu khách hàng chuyển hướng đến một trang khác. – Wolph

6

Đây là phiên bản cũ, nhưng tôi đã gặp sự cố tương tự khi thực hiện kiểm tra đơn vị. Đây là cách tôi giải quyết vấn đề.

Bạn có thể sử dụng response.redirect_chain và/hoặc response.request['PATH_INFO'] để lấy url chuyển hướng.

Kiểm tra tài liệu! 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

Tôi rất muốn biết phiếu bầu là gì. – pyrospade

+0

Tôi đã đến đây để tìm hiểu về con đường phản hồi. Nhưng nó không có vẻ như 'HttpResponse' có phương thức gọi là' request' hoặc 'redirect_chain'. ngược lại hoạt động để nhận được url mặc dù. – Jonathan

+0

Quên 'follow = True' là một điều rất tệ. Bạn đã không, tôi đã làm. https://code.djangoproject.com/ticket/10971 – aliteralmind