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

时间:2014-06-27 16:18:00

标签: django django-templates django-views

错误:

  

失败原因:未设置CSRF cookie。

     

通常,当存在真正的跨站请求时,可能会发生这种情况   伪造,或者当Django的CSRF机制没有被正确使用时。   对于POST表单,您需要确保:您的浏览器正在接受cookie。   视图函数使用RequestContext作为模板,而不是   语境。在模板中,有一个{%csrf_token%}模板标记   在每个POST表单内部,以内部URL为目标。如果你不是   使用CsrfViewMiddleware,您必须在任何视图上使用csrf_protect   使用csrf_token模板标签,以及接受的标签   发布数据。您正在查看此页面的帮助部分,因为您   在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>

我的Views.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))

设置

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',

1 个答案:

答案 0 :(得分:-1)

使用csrf_exempt来避免使用csrf令牌。

在视图中

来自django.views.decorators.csrf import 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))