2012-07-23 72 views
21

我在我的django應用程序中有一個流程,在該流程中,我將用戶重定向到另一個服務(例如PayPal),該服務經過一些自己的處理後,將用戶返回到我自己的服務器上。我的服務器上的返回點是一個簡單的HTML成功頁面,我使用direct_to_template進行渲染。如何在direct_to_template上豁免CSRF保護

由於一些奇怪的原因,其他服務器發送POST請求,因此用戶看到CSRF令牌缺少錯誤,因爲其他服務器不發送任何CSRF令牌。

如何豁免CSRF令牌的direct_to_template視圖?

回答

34

您可以使用裝飾器csrf_exempt禁用特定視圖的CSRF保護。

說你的URL模式是:

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

添加以下導入到你的urls.py

from django.views.decorators.csrf import csrf_exempt 

然後URL模式更改爲:

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

可以使用@csrf_exempt裝飾者超出csrf令牌爲此,您必須導入

from django.views.decorators.csrf import csrf_exempt 

那麼你的觀點之前記@csrf_exempt

這將正常工作:)

+3

這不回答這個問題所有的,因爲他要使用內置的使用direct_to_template功能,不裝飾自己views – 2015-02-02 14:12:21

+0

你也可以在'dispatch'方法中爲你的基於類的視圖使用'@method_decorator(csrf_exempt)'。 – 2017-07-29 10:48:24