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

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

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

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

【问题讨论】:

    标签: django csrf


    【解决方案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
      猜你喜欢
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 2020-09-13
      • 2020-01-15
      • 2011-06-27
      • 1970-01-01
      相关资源
      最近更新 更多