Các biểu mẫu có sử dụng phương thức POST bắt buộc phải có bảo vệ CSRF không? Tôi đang theo dõi một cuốn sách và các ví dụ mã ném 403 lỗi. Tôi đã thực hiện một số tìm kiếm và có vẻ như tôi cần bật CSRF trong tất cả các biểu mẫu của mình.Django: biểu mẫu POST yêu cầu CSRF? GET không?
Câu hỏi của tôi là:
Liệu Django hiện yêu cầu tất cả các hình thức POST được bảo vệ khỏi CSRF?
Tất cả những gì tôi cần làm để thực hiện việc này là thêm 'django.middleware.csrf.CsrfViewMiddleware', trả về render_to_response (mẫu, từ điển, context_instance = RequestContext (yêu cầu) và thêm '{% csrf_token%}' vào hình thức tương ứng? tôi có thiếu bất cứ điều gì ở đây?
Khi tôi làm điều này, hình thức hoạt động tốt. Khi bất kỳ những mảnh là mất tích, nó không 403. tôi chỉ muốn chắc chắn rằng tôi đang làm nó QUYỀN. :)
Xin cảm ơn trước.
chỉnh sửa:
Vì lý do nào đó mã này không có ý nghĩa với tôi nhưng nó không trả về bất kỳ lỗi nào. Vui lòng bỏ qua xác thực nguyên thủy vì tôi chưa đến phần của cuốn sách, nơi nó cho thấy cách hiệu quả hơn để làm điều đó.
def contact(request):
errors = []
if request.method == 'POST':
if not request.POST.get('subject',''):
errors.append('Enter a subject')
if not request.POST.get('message',''):
errors.append('Enter a message')
if request.POST.get('email', '') and '@' not in request.POST['email']:
errors.append('Enter a valid email address')
if not errors:
send_mail(
request.POST['subject'],
request.POST['message'],
request.POST.get('email', '[email protected]'), ['[email protected]'],)
return HttpResponseRedirect('/contact/thanks/')
return render_to_response('contact_form.html', { 'errors': errors }, context_instance=RequestContext(request))
Vấn đề của tôi là với dòng cuối cùng của chức năng chế độ xem này. Nó chỉ được gọi nếu request.method! = POST. Điều này có vẻ hoàn toàn sai với tôi. Tôi không nên gọi "context_instance = RequestContext (yêu cầu)" khi nó đang thực hiện POST?