Python Django--CSRF令牌丢失或不正确

Python Django--CSRF令牌丢失或不正确,python,django,Python,Django,所以我被禁止(403)CSRF验证失败。请求被中止。给出的失败原因:CSRF令牌丢失或不正确。 我的中间件类中有“django.middleware.csrf.CsrfViewMiddleware”。 这是我的模板 <form name="input" action="/login/" method="Post"> {% csrf_token %} <input type="submit" value="Submit"></form> 我对Django和大多

所以我被禁止(403)CSRF验证失败。请求被中止。给出的失败原因:CSRF令牌丢失或不正确。
我的中间件类中有“django.middleware.csrf.CsrfViewMiddleware”。 这是我的模板

<form name="input" action="/login/" method="Post"> {% csrf_token %}
<input type="submit" value="Submit"></form>
我对Django和大多数web开发都是新手,但我似乎在这里找不到问题。任何帮助都将不胜感激

我还在django文档中尝试了该方法

c = {}
c.update(csrf(request))
# ... view code here
return render_to_response("a_template.html", c)

您应该执行以下操作:

def login(request):
     context = {}
     request_context = RequestContext(request)
     return render_to_response('foo.html', context,
                               request_context=request_context)

下面是关于
呈现到\u响应的

请尝试在登录功能之前添加@csrf\u protect decorator

from django.views.decorators.csrf import csrf_protect

@csrf_protect
def login(request):
     csrfContext = RequestContext(request)
     return render_to_response('foo.html', csrfContext)

如果表单不在foo.html中,那么您需要将@csrf\u protect方法添加到生成该表单的视图函数中。

我与您有相同的问题,我发现这段代码解决了我的问题

from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render
from django.contrib import auth

#in accounts.forms i've placed my login form with two fields, username and password
from accounts.forms import LoginForm

@csrf_exempt
def login(request):
   if request.method == "POST":
      form = LoginForm(request.POST)
      if form.is_valid():
         user = auth.authenticate(
                username=form.cleaned_data["username"],
                password=form.cleaned_data["password"])
                auth.login(request, user)
                return HttpResponseRedirect("/")
      else:
         form = LoginForm()

return render(request, 'accounts/login.html', {'form':form})

只需在HTML中添加以下内容:

{% csrf_token %}

转到URL并将.as_view()添加到视图方法/类旁边 前


当禁用
CSRF
令牌并手动获取
CSRF
令牌值时,获得authortokenview.as_view()仍然有效。但是,在我的例子中,语法没有像html中那样正确地构造,我们不担心我们的脚本设计,但我认为当使用
jinja
即我们的模板语言时,这很重要,是的,这就是我解决问题的方法。

只是一个旁注:如果您是Django的新手,我会考虑使用基于类的视图来处理所有问题。即使您只是覆盖
post
,它们至少会强制服务器将响应哪些HTTP请求类型。创建的模板/视图是什么?您需要在模板中添加
{%csrf\u token%}
。并确保
RequestContext
存在。。当然,
settings.py
和。。如果问题仍然存在。我不确定,但是。。尝试一些
@csrf\u豁免
decorators。。etcStill也会遇到同样的错误,我还尝试使用@csrf_protect decorator,但没有任何改进……在您的html中,您看到了csrf令牌吗?如果没有,请尝试添加
requires_csrf_token
decorator。尝试了它,仍然得到相同的错误,也尝试了上面的建议,修复了render_to_响应语法…问题可能是您正在从另一个页面发布/login/而另一个页面上没有@csrf_protect?您的评论中的模板文本来自哪个页面?查看正在生成的HTML,并验证其中是否包含csrf_protect令牌。添加csrf_Except应该不是必需的,这会使您的站点易受攻击。该装饰器适用于您特别需要此类请求、意识到风险并已采取其他预防措施的边缘情况。
crpf
csrf
token
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render
from django.contrib import auth

#in accounts.forms i've placed my login form with two fields, username and password
from accounts.forms import LoginForm

@csrf_exempt
def login(request):
   if request.method == "POST":
      form = LoginForm(request.POST)
      if form.is_valid():
         user = auth.authenticate(
                username=form.cleaned_data["username"],
                password=form.cleaned_data["password"])
                auth.login(request, user)
                return HttpResponseRedirect("/")
      else:
         form = LoginForm()

return render(request, 'accounts/login.html', {'form':form})