2012-01-21 23 views
5

Tôi không gặp vấn đề này trên môi trường phát triển cục bộ của mình, nhưng tôi vừa triển khai ứng dụng với nginx + gunicorn (lần đầu tiên triển khai ứng dụng) và tôi nhận được sự truy nguyên này bất cứ khi nào tôi cố gắng đưa ra yêu cầu.Không đúng cấu hình: Mô-đun phần mềm trung gian "django.middleware.csrf" không xác định lớp "CsrfResponseMiddleware"

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 

Sau đây là một phần của tập tin settings.py tôi

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', 
) 

Bất cứ ai có thể chỉ cho tôi đi đúng hướng?

Trả lời

4

Hình như máy chủ nơi bạn đã triển khai có phiên bản khác của Django (cũ). Ngoài ra Penthi là đúng, CsrfResponseMiddleware là cho khả năng tương thích ngược và cần được loại bỏ. https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#legacy-method.

+0

Thực ra nó phải là phiên bản mới nhất, 1.3.1. Tôi vừa mới cài đặt nó vài ngày trước. Tôi đã đi vào tập tin 'csrf.py' và thấy rằng lớp' CsrfResponseMiddleware' thực sự không được định nghĩa trong đó ... –

+0

Bạn đã cài đặt nó từ thân cây chưa? Tôi vừa tải xuống bản lưu trữ 1.3.1 và tệp 'csrf.py' có' CsrfResponseMiddleware'. Nhưng nó đã được gỡ bỏ trong thân cây - https://code.djangoproject.com/browser/django/trunk/django/middleware/csrf.py?rev=15949 – demalexx

+0

ahh có ... tôi đã nhận nó từ thân cây ... nghĩ rằng tôi đã nhận được 1.3.1! –

1

Trong Django 1.3, Tôi chỉ có django.middleware.csrf.CsrfViewMiddleware trong middlewares tôi để có được sự bảo vệ CSRF làm việc

4

Trong Django 1.4, bạn nên xóa 'django.middleware.csrf.CsrfResponseMiddleware', vì nó có thể gây ra sự cố bảo mật.

Hơn nữa, hai việc phải được thực hiện.

  1. Thêm thẻ {% csrf_token %} vào biểu mẫu bài đăng của bạn.
  2. Sử dụng RequestContext thay vì Context trong tất cả các tệp views.py tương đối của bạn.
Các vấn đề liên quan