में HTTP_REFERER शीर्षलेख सेट करना मैं एक Django वेब एप्लिकेशन पर काम कर रहा हूं (अन्य चीजों के साथ) POST
अनुरोध का उपयोग करके भेजे गए लेनदेन स्थिति की जानकारी को संभालने की आवश्यकता है।Django परीक्षण
if request.META.get('HTTP_REFERER', '') != settings.PAYMENT_URL and not settings.DEBUG:
return HttpResponseForbidden('Incorrect source URL for updating payment status')
अब मैं बाहर काम करने के लिए कैसे परीक्षण करना चाहते हैं:
भुगतान गेटवे द्वारा समर्थित HTTP सुरक्षा के अलावा, मेरे विचार चेकों request.META['HTTP_REFERER']
settings.py
में एक प्रविष्टि के खिलाफ अजीब व्यापार को रोकने के लिए प्रयास करने के लिए यह व्यवहार
मैं आसानी से विफलता उत्पन्न कर सकता हूं;
def test_transaction_status_succeeds(self):
response = self.client.post(reverse('transaction_status'), { ... })
self.assertEqual(response.status_code, 403)
कैसे, हालांकि, मैं नकली एक सफल प्रस्तुत कर सकते हैं: HTTP_REFERER
(जाहिर) एक सामान्य पेज लोड के साथ None
है? मैंने extra
, में HTTP_REFERER
सेट करने का प्रयास किया है।self.client.post(..., extra={'HTTP_REFERER': 'http://foo/bar'})
, लेकिन यह काम नहीं कर रहा है; दृश्य स्पष्ट रूप से अभी भी एक खाली शीर्षलेख देख रहा है।
क्या परीक्षण क्लाइंट कस्टम हेडर का भी समर्थन करता है? क्या कोई काम नहीं है अगर नहीं? मैं Django 1.1 का उपयोग कर रहा हूं, और अगर संभव हो तो अभी तक अपग्रेड नहीं करना पसंद करूंगा।
यह आपकी समस्या नहीं थी, लेकिन जिन लोगों को मेरी कठिनाई हो रही थी, उनके लिए: Django उन शीर्षकों को पहचान नहीं रहा था जिन्हें मैं भेज रहा था क्योंकि मैंने उनके नामों को दस्तावेज के रूप में सही ढंग से परिवर्तित नहीं किया था [https] // https: // docs। djangoproject.com/en/1.6/topics/testing/tools/#django.test.client.Client.get), जैसा कि [सीजीआई विनिर्देश का वर्णन किया गया है] (http://tools.ietf.org/html/draft-robinson- www इंटरफ़ेस-00 # पेज -8)। उदाहरण के लिए, 'एक्स-सीएसआरएफटीओएन' 'HTTP_X_CSRFTOKEN' होगा। उन्हें बदलने के बाद मैं उन्हें आसानी से kwargs के रूप में उपयोग कर सकता हूं, जैसा कि नीचे पर्यवेचु के उत्तर में है। –