2011-10-31 12 views
5

मान लें कि मेरे पास एक Django प्रतिक्रिया वस्तु है।Django प्रतिक्रिया ऑब्जेक्ट में स्थान URL कैसे ढूंढें?

मैं यूआरएल (स्थान) ढूंढना चाहता हूं। हालांकि, प्रतिक्रिया शीर्षलेख में वास्तव में कोई स्थान या सामग्री-स्थान फ़ील्ड नहीं होता है।

मैं इस प्रतिक्रिया वस्तु से, यह दिखा रहा हूं कि यूआरएल कैसे दिखा रहा है?

+0

आप कुछ गलत कर रहे हैं। –

उत्तर

6

प्रतिक्रिया यूआरएल का फैसला नहीं करती है, अनुरोध करता है।

प्रतिक्रिया आपको प्रतिक्रिया की सामग्री देता है, न कि इसका यूआरएल।

+0

लेकिन यदि कोई रीडायरेक्ट है, तो अनुरोध नहीं पता है। –

+1

@ जोसेफ तुर्यियन: सुनिश्चित करें कि यह करता है, यह रेफरर हेडर में है: 'request.META ['HTTP_REFERER']'। –

+0

@ जोसेफटुरियन: अनुरोध क्लाइंट से डेटा पढ़ने के लिए है, प्रतिक्रिया क्लाइंट को डेटा भेजने के लिए है। आप क्लाइंट को यह नहीं बता सकते कि वह किस यूआरएल पर है क्योंकि उसने आपको वह डेटा पहले से ही दिया है। आप ग्राहक को किसी भिन्न पृष्ठ पर रीडायरेक्ट करने के लिए कह सकते हैं। – Wolph

6

यह पुराना है, लेकिन यूनिट परीक्षण करते समय मैं एक समान मुद्दे में भाग गया। यहां बताया गया है कि मैंने समस्या का हल कैसे किया।

आप रीडायरेक्ट यूआरएल को पकड़ने के लिए response.redirect_chain और/या response.request['PATH_INFO'] का उपयोग कर सकते हैं।

दस्तावेज़ीकरण भी देखें! 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

मुझे यह जानना अच्छा लगेगा कि नीचे वोट क्या है। – pyrospade

+0

मैं यहां प्रतिक्रिया के मार्ग के बारे में पता लगाने की कोशिश कर रहा हूं। लेकिन ऐसा लगता है कि 'HttpResponse'' विधि 'अनुरोध' या 'redirect_chain' नामक विधि नहीं है। हालांकि यूआरएल प्राप्त करने के लिए रिवर्स काम करता है। – Jonathan

+0

'follow = True' को भूलना वास्तव में एक बहुत ही बुरी चीज है। आपने नहीं किया, मैंने किया। https://code.djangoproject.com/ticket/10971 – aliteralmind

संबंधित मुद्दे