2012-08-02 22 views
13

मुझे यह त्रुटि कभी-कभी कस्टम मिडलवेयर में process_response विधि में मिलती है।'WSGIRequest' ऑब्जेक्ट में कोई विशेषता नहीं है 'सत्र'

MIDDLEWARE_CLASSES = [ 
'django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.middleware.doc.XViewMiddleware', 
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'application.middleware.LastCampaignSessionMiddleware' 

]

तो सत्र मिडलवेयर मेरी मिडलवेयर पहले रखा जाता: मैं middlewares के निम्नलिखित सूची है। मेरे पास स्रोत कोड में कोई del request.session अभिव्यक्ति नहीं है। यह process_response विधि है:

def process_response(self, request, response): 
     if 'last_campaign_id' in request.session and request.session['last_campaign_id']: 
      if request.COOKIES['last_campaign_id'] != request.session['last_campaign_id']: 
       response.set_cookie('last_campaign_id', request.session['last_campaign_id']) 
     return response 

सुनिश्चित नहीं हैं कि क्यों यह बिल्कुल हो सकता है।

संपादित 03-08-2012 12-30

यह ब्राउज़र का अनुरोध फ़ेविकॉन की तरह दिखता है:

[03/Aug/2012 10:26:42] "GET /favicon.ico/ HTTP/1.1" 404 6701 

वहाँ इस यूआरएल को हल करने Django में कोई डिफ़ॉल्ट व्यवहार है? क्योंकि मैंने स्पष्ट रूप से दृश्य निर्दिष्ट नहीं किया है जिसे इस अनुरोध को संभालना चाहिए। और मैं पेज स्रोत कोड में फेविकॉन का उपयोग नहीं करता हूं। तो मुझे लगता है कि यह ब्राउज़र है जो/favicon.ico का अनुरोध करता है। मुझे लगता है कि 404 त्रुटि के मामले में HttpRequest ठीक से निर्माण नहीं करेगा, इसलिए कोई आश्चर्य नहीं कि मेरे पास अनुरोध ऑब्जेक्ट में कोई सत्र नहीं है। लेकिन यह सिर्फ मेरी धारणा है।

यदि यह आवश्यक हो तो मैं यह त्रुटि प्राप्त करते समय django dev सर्वर का उपयोग कर रहा हूं।

संपादित 13-00

मैं फ़ेविकॉन के साथ इस समस्या तय कर दी है, लेकिन अभी भी त्रुटि मिल रही है। अनुरोध में सत्र क्यों मौजूद नहीं हो सकता है?

+0

तो समस्या क्या है? अगर आपको कोई त्रुटि मिलती है तो क्या आप इस प्रश्न में लॉग जोड़ सकते हैं? – StefanNch

+0

ओह, यह शीर्षक में है: 'WSGIRequest' ऑब्जेक्ट में कोई विशेषता 'सत्र' नहीं है। हर बार जब मैं अपनी साइट का कोई यूआरएल प्राप्त करने की कोशिश कर रहा हूं। यह application.middleware.LastCampaignSessionMiddleware की process_response विधि में होता है। – sunprophit

उत्तर

19

समस्या मध्यवर्ती आदेश में थी।

CommonMiddleware HttpResponsePermanentRedirect रिटर्न मामले ऐसे हैं जहां यूआरएल का अनुरोध करने में 'www' या पीछे '/' (APPEND_SLASH और PREPEND_WWW सेटिंग्स में) जोड़ा गया है। ऐसे मामले में django process_request विधियों के लिए मिडलवेयर सूची के माध्यम से देख रहा है और process_response विधियों को चलाने के लिए शुरू होता है।

यह खराब है कि मानक django middlewares के लिए इस तरह के व्यवहार के बारे में कोई जानकारी नहीं है (यानी मिडलवेयर कुछ मामलों में वापस आ सकता है HttpResponse ऑब्जेक्ट)।

+2

धन्यवाद - उत्कृष्ट स्पष्टीकरण, यह वही है जो मेरे साथ हो रहा है और क्यों। पहले सत्र मिडलवेयर डालने के बजाय, आप इसके लिए भी इसकी रक्षा कर सकते हैं: 'अगर हैट्रर (अनुरोध,' सत्र ') ' – dkamins

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

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