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

我一直在我的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文件中的这个按钮不起作用。

<form name="AddNewUser" action="/ac/AddNewUser" method="post"> {% csrf_token %} <input type="submit" name="addNewUser" id="addNewUser" value="Create User"></form>

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


您必须使用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查找所有可用的上下文处理器,获取它们的上下文,并将它们全部附加到单个(巨型)上下文中。


注:RequestContext必须用于提供表单的视图以及接收帖子的视图。 如果您按照上面的说明操作仍然无效,则可能是问题所在! 这是给我的。

链接地址: http://www.djcxy.com/p/56517.html

上一篇: CSRF token missing or incorrect even though I have {% csrf

下一篇: Conflicting template tags