您的位置:首页 > 编程语言 > Go语言

Django提交表单出错”django, CSRF token missing or incorrect”

2017-07-31 11:33 555 查看
先说一下问题原因:

   Django打开CSRF后,表单提交都要带上CSRF,否则会被系统认为一次“跨站请求伪造”,而不进行受理。

   解决问题的普遍办法是: 在form内加上 {% csrf_token %},在提交表单时,带上csrf参数。

 

——————————————————————转载内容————————————————————————————————

有学习django表单,碰到"CSRF token missing or incorrect."问题。

寻找解决方法如下:(已验证确实可行)

现象:

Forbidden (403)

CSRF verification failed. Request aborted.

Help

Reason given for failure:

CSRF token missing or incorrect.

In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. For POST forms, you need to ensure:

Your browser is accepting cookies.

The view function uses RequestContext for the template, instead of Context.

In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.

If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data.

You're seeing the help section of this page because you have DEBUG = True in your Django settings file. Change that to False, and only the initial error message will be displayed.

You can customize this page using the CSRF_FAILURE_VIEW setting.

解决步骤:

1〉django工程settings.py

MIDDLEWARE_CLASSES = (

    'django.middleware.common.CommonMiddleware',

    'django.contrib.sessions.middleware.SessionMiddleware',

    'django.middleware.csrf.CsrfViewMiddleware',#确认存在

    'django.contrib.auth.middleware.AuthenticationMiddleware',

    'django.contrib.messages.middleware.MessageMiddleware',

    # Uncomment the next line for simple clickjacking protection:

    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',

)

2〉html中的form添加模板标签{% csrf_token %}

<form action="." method="post">{% csrf_token %}

3〉django工程views.py

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

def some_view(request):

    # ...

    return render_to_response('my_template.html',

                              my_data_dictionary,

                              context_instance=RequestContext(request))

原文链接:http://www.myexception.cn/program/1457943.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Django CSRF