CSRF验证失败。请求被中止。CSRF cookie 未设置

use*_*324 5 django django-templates django-views

错误:

给出的失败原因:未设置 CSRF cookie。

一般来说,当存在真正的跨站请求伪造,或者Django的CSRF机制没有被正确使用时,就会发生这种情况。对于 POST 表单,您需要确保: 您的浏览器正在接受 cookie。视图函数使用 RequestContext 作为模板,而不是 Context。在模板中,每个针对内部 URL 的 POST 表单内都有一个 {% csrf_token %} 模板标记。如果您不使用 CsrfViewMiddleware,则必须在使用 csrf_token 模板标记的任何视图以及接受 POST 数据的视图上使用 csrf_protect。您看到此页面的帮助部分是因为您的 Django 设置文件中有 DEBUG = True。将其更改为 False,则仅显示初始错误消息。您可以使用 CSRF_FAILURE_VIEW 设置自定义此页面。

我做了我能找到的一切,但没有任何帮助,一定是非常愚蠢的事情((

我的模板

<form method="POST">{% csrf_token %}
     {% for field in  form %}
       <div class="control-group">
            {{ field }}
       </div>
     {% endfor %}
     <input type="Submit" id="fsubmit" class="btn btn-primary btn-large btn-block" value='Register'/>
</form>
Run Code Online (Sandbox Code Playgroud)

我的观点.py

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

def register_user(request):
    context = {}
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            pass
    else:
        form = RegisterForm(auto_id=False)
    context['form'] = form
    return render_to_response('templates/register.htm',context, context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

设置

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',
Run Code Online (Sandbox Code Playgroud)

小智 2

使用 csrf_exempt 避免 csrf 令牌。

视野中

从 django.views.decorators.csrf 导入 csrf_exempt

@csrf_exempt
def register_user(request):
    context = {}
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            pass
    else:
        form = RegisterForm(auto_id=False)
    context['form'] = form
    return render_to_response('templates/register.htm',context, context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)