2012-07-23 35 views
21

Tôi có luồng trong ứng dụng django của mình, trong đó tôi chuyển hướng người dùng đến một dịch vụ khác (ví dụ: PayPal) sau khi xử lý riêng. Điểm trả về trên máy chủ của tôi là một trang HTML thành công đơn giản mà tôi render bằng direct_to_template.Cách miễn bảo vệ CSRF trên direct_to_template

Vì một số lý do lạ, máy chủ khác gửi yêu cầu POST và do đó người dùng thấy mã thông báo CSRF bị thiếu do máy chủ khác không gửi lại bất kỳ mã thông báo CSRF nào.

Tôi làm cách nào để miễn chế độ xem trực tiếp_to_template từ mã thông báo CSRF?

Trả lời

34

Bạn có thể sử dụng trình trang trí csrf_exempt để tắt tính năng bảo vệ CSRF cho một chế độ xem cụ thể.

Say mẫu url của bạn là:

('^my_page/$', direct_to_template, {'template': 'my_page.html'}) 

Thêm việc nhập khẩu sau vào urls.py của bạn:

from django.views.decorators.csrf import csrf_exempt 

Sau đó thay đổi các mẫu url để:

('^my_page/$', csrf_exempt(direct_to_template), {'template': 'my_page.html'}) 
31

Bạn có thể sử dụng @csrf_exempt trang trí để trích dẫn mã thông báo csrf cho điều này, bạn phải nhập

from django.views.decorators.csrf import csrf_exempt 

sau đó viết @csrf_exempt trước xem bạn

này sẽ hoạt động đúng :)

+3

này không trả lời câu hỏi ở tất cả, như ông muốn sử dụng được xây dựng trong chức năng direct_to_template, không trang trí riêng của mình views –

+0

Bạn cũng có thể sử dụng '@method_decorator (csrf_exempt)' trên phương thức 'dispatch' cho các khung nhìn dựa trên lớp của bạn. –

Các vấn đề liên quan