当前位置:  开发笔记 > 编程语言 > 正文

CSRF令牌丢失或不正确,即使我有{%csrf_token%}

如何解决《CSRF令牌丢失或不正确,即使我有{%csrf_token%}》经验,为你挑选了1个好方法。

我在views.py文件中引用此方法时遇到此错误:

def AddNewUser(request):
    a=AMI()
    if(request.method == "POST"):
        print(request.POST)
       # print(request['newUser'])
       # print(request['password'])
    return render_to_response("ac/AddNewUser.html", {})

但我的其他功能工作得很好.这只是我的HTML文件中的这个按钮不起作用.

{% csrf_token %}

正如你所看到的,我已经得到了{%csrf_token%},但它仍然没有用.我也知道有些人在他们的settings.py中没有MIDDLEWARE_CLASSES但是我已经正确插入了这个问题.什么可能导致这个问题?错误中唯一的另一行说:"视图函数使用RequestContext作为模板,而不是Context." 但我不知道这意味着什么.



1> John C..:

您必须使用RequestContext对象来获取上下文,然后将结果传递给render_to_response()函数.RequestContext添加了必需的CSRF令牌.

from django.template import RequestContext
from django.shortcuts import render_to_response

csrfContext = RequestContext(request)
return render_to_response(some_template, csrfContext)

作为旁注,您还可以使用RequestContext添加用于模板的上下文/字典.例如,我经常使用:

initialData = {'form': theForm, 'user_status': 'online'}
csrfContext = RequestContext(request, initialData)
return render_to_response(show_template, csrfContext)

作为RequestContext做什么的(简要)解释:大多数中间件创建称为上下文处理器的东西,它只是一个提供变量上下文(字典)的函数.RequestContext查找所有可用的上下文处理器,获取它们的上下文,并将它们全部附加到单个(巨型)上下文.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有