2012-01-21 12 views
5

मुझे अपने स्थानीय विकास पर्यावरण पर यह समस्या नहीं है, लेकिन मैंने अभी ऐप को nginx + gunicorn के साथ तैनात किया है (पहली बार तैनाती ऐप) और जब भी मैं कोई अनुरोध करने का प्रयास करता हूं तो मुझे यह ट्रेसबैक मिल रहा है।अनुचित रूप से कॉन्फ़िगर किया गया: मिडलवेयर मॉड्यूल "django.middleware.csrf" एक "सीएसआरएफ रेस्पॉन्स मिडलवेयर" वर्ग को परिभाषित नहीं करता है

2012-01-21 22:24:36 [5712] [ERROR] Error handling request 
Traceback (most recent call last): 
    File "/usr/lib/pymodules/python2.7/gunicorn/workers/sync.py", line 96, in handle_request 
    respiter = self.wsgi(environ, resp.start_response) 
    File "/usr/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 219, in __call__ 
    self.load_middleware() 
    File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 51, in load_middleware 
    raise exceptions.ImproperlyConfigured('Middleware module "%s" does not define a "%s" class' % (mw_module, mw_classname)) 
ImproperlyConfigured: Middleware module "django.middleware.csrf" does not define a "CsrfResponseMiddleware" class 

निम्नलिखित मेरी settings.py फ़ाइल का एक हिस्सा

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.middleware.csrf.CsrfResponseMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

किसी को भी सही दिशा में मुझे बात कर सकते हैं?

उत्तर

4

सर्वर तुम कहाँ तैनात (पुराने एक) Django के विभिन्न संस्करण है की तरह लग रहा निकलना है। पेंति भी सही है, CsrfResponseMiddleware पिछड़ा संगतता के लिए है और इसे हटाया जाना चाहिए। https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#legacy-method

+0

असल में यह नवीनतम होना चाहिए, 1.3.1। मैंने इसे कुछ दिन पहले स्थापित किया था। मैं 'csrf.py' फ़ाइल में गया और पाया कि 'CsrfResponseMiddleware' वर्ग वास्तव में वहां परिभाषित नहीं है ... –

+0

क्या आपने इसे ट्रंक से इंस्टॉल किया है? मैंने अभी 1.3.1 संग्रह डाउनलोड किया है और 'csrf.py' फ़ाइल में' CsrfResponseMiddleware' है। लेकिन इसे ट्रंक में हटा दिया गया था - https://code.djangoproject.com/browser/django/trunk/django/middleware/csrf.py?rev=15949 – demalexx

+0

आह हाँ ... मुझे इसे ट्रंक से मिला ... मैंने सोचा 1.3.1 मिल रहा था! –

1

Django 1.3 में, मैं केवल django.middleware.csrf.CsrfViewMiddleware मेरी middlewares में CSRF संरक्षण काम कर

4

Django 1.4 में, आपको 'django.middleware.csrf.CsrfResponseMiddleware' को हटा देना चाहिए, क्योंकि इससे सुरक्षा समस्याएं हो सकती हैं।

इसके अलावा, दो चीजें पूरी की जानी चाहिए।

  1. अपने पोस्ट फॉर्म में {% csrf_token %} टैग जोड़ें।
  2. RequestContextContext के बजाय अपने सभी सापेक्ष views.py फ़ाइलों में उपयोग करें।
संबंधित मुद्दे