2012-07-23 73 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