如何在 direct_to_template 上免除 CSRF 保护

Posted

技术标签:

【中文标题】如何在 direct_to_template 上免除 CSRF 保护【英文标题】:How to exempt CSRF Protection on direct_to_template 【发布时间】:2012-07-21 13:22:48 【问题描述】:

我的 django 应用程序中有一个流程,在该流程中我将用户重定向到另一个服务(例如 PayPal),该服务经过自己的处理后,将用户返回到我自己的服务器上。我的服务器上的返回点是一个简单的 html 成功页面,我使用 direct_to_template 呈现它。

由于一些奇怪的原因,另一台服务器发送了一个 POST 请求,因此用户看到一个 CSRF 令牌丢失错误,因为另一台服务器没有发回任何 CSRF 令牌。

如何从 CSRF 令牌中免除 direct_to_template 视图?

【问题讨论】:

【参考方案1】:

您可以使用 csrf_exempt 装饰器来禁用特定视图的 CSRF 保护。

假设你的网址格式是:

('^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')

【讨论】:

【参考方案2】:

您可以使用 @csrf_exempt 装饰器来免除您必须导入的 csrf 令牌

from django.views.decorators.csrf import csrf_exempt

然后在你的视图前写上@csrf_exempt

这将正常工作:)

【讨论】:

这根本不回答问题,因为他想使用内置的direct_to_template函数,而不是装饰自己的视图 您也可以在dispatch 方法上使用@method_decorator(csrf_exempt) 用于您的基于类的视图。 @MarkMishyn 你能详细说明一下吗?例如我们从哪里导入method_decorator?编辑:from django.utils.decorators import method_decorator

以上是关于如何在 direct_to_template 上免除 CSRF 保护的主要内容,如果未能解决你的问题,请参考以下文章

Django Direct_to_template 或平面页面

Django - render()、render_to_response() 和 direct_to_template() 有啥区别?

将 Django direct_to_template 函数转换为使用基于类的视图

django 1.9 中的 from django.views.generic.simple import direct_to_template 相当于啥

linux 免密登录

django root url 不起作用