繁体   English   中英

Django csrf 令牌丢失或错误 403

[英]Django csrf token missing or incorrect error 403

当我提交表单时,我收到以下错误:

CSRF 验证失败

失败的原因:

 CSRF token missing or incorrect.

我的 views.py 是:

def name(request):
   if request.method == 'POST':
        form=NameForm(request.POST)
        if form.is_valid():
            name=form.cleandata['your_name']
            return HttpResponseRedirect('/thanks/',RequestContext(request))

    else:
        form=NameForm()
    return render_to_response('contact.html')

我的setting.py文件:

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

我的 forms.py 文件是:

class NameForm(forms.Form):
    your_name=forms.CharField(initial='your name',max_length=100)

我的contact.html是:

<form action="/your-name/" method="POST">
{% csrf_token %}
{{form}}
<input type="submit" value="Submit" />
</form>

urls.py 是:

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^search/$', search),url(r'^contact/$',contact),
url(r'^name/$',name),url(r'^your-name',name),url(r'^thanks/$',thank)
]

使用render函数来渲染模板,而不是render_to_response

from django.shortcuts import render

def name(request):
  if request.method == 'POST':
    form = NameForm(request.POST)
    if form.is_valid():
        name = form.cleaned_data['your_name']
        return HttpResponseRedirect('/thanks/', RequestContext(request))
    else:
        form = NameForm()
    return render(request, 'contact.html')

使用@csrf_protect装饰器。 您可以在此处获取有关 csrf 的详细信息

csrf Forbidden (CSRF token missing or incorrect.)提交请求时:

在一个表单中,包含{% csrf_token %} ,它会生成一个带有 csrf 令牌值的输入标签,并在请求中包含包含 X-CSRFTOKEN 的标头

headers: {
  content_type: 'application/json',
  'X-CSRFToken': "{{ csrf_token }}"
},

https://docs.djangoproject.com/en/3.1/ref/csrf/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM