2010-07-17 34 views
15

Tôi có chế độ xem Django nhận các POST mà không cần phải có mã thông báo CSRF. Vì vậy, tôi đã sử dụng trình trang trí @csrf_exempt trên chế độ xem. Vấn đề là đôi khi tôi không đưa ra một phản hồi từ khung nhìn (đó là một bot Twitter, nó nhận được một POST HTTP cho mỗi tweet và tôi không muốn trả lời từng tweet). Khi tôi không đưa ra một câu trả lời tôi nhận được lỗi sau:Tắt Django CSRF cho các chế độ xem không phải lúc nào cũng có phản hồi

Traceback (most recent call last): 

File "/home/adam/webapps/newman/lib/python2.5/django/core/handlers/base.py", line 100, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 

File "/home/adam/webapps/newman/lib/python2.5/django/views/decorators/csrf.py", line 24, in wrapped_view 
    resp.csrf_exempt = True 

AttributeError: 'NoneType' object has no attribute 'csrf_exempt' 

resp (mà tôi giả định là phản ứng) là Không vì xem được thoát chỉ với return. Làm cách nào để tránh lỗi này và vẫn không yêu cầu mã thông báo CSRF trong POST.

Cảm ơn!

+0

Hiện một số mã! –

Trả lời

7

Django thực sự mong đợi các chức năng xem để trả về phản hồi. Có lẽ bạn có thể trả lời một câu trả lời trống thay vì Không? Hoặc trả lại mã lỗi HTTP?

9

Tôi biết bạn đã nhận được câu trả lời của bạn và thực sự là quyền của Ned; nhưng ngoài ra: không chỉ Django thực sự mong đợi quan điểm để trả lại một phản ứng, khách hàng của bạn cũng! Đó là một lỗi HTTP và có thể là một sự lãng phí tài nguyên không trả lại một cái gì đó (và do đó đóng kết nối ngay lập tức)!

Tôi nghĩ rằng nội dung 204 Không có nội dung hoặc 304 Không được sửa đổi (xem: HTTP Status Codes) là các mã http thích hợp để sử dụng trong trường hợp này; trong django:

return HttpResponse(status=204) 

hoặc

from django.http import HttpResponseNotModified 
return HttpResponseNotModified() 
Các vấn đề liên quan