如何在 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 相当于啥