简体   繁体   English

“CSRF令牌丢失或不正确”

[英]“CSRF token missing or incorrect”

EDIT SOLVED : I feel like such a moron. 编辑解决 :我觉得这样的白痴。 I originally created two separate views: one for input and one for output. 我最初创建了两个单独的视图:一个用于输入,一个用于输出。 I had been handling all of the code here in the output view even though I rearranged my url and template to just reuse the input view... SORRY EVERYONE. 我已经在输出视图中处理了所有代码,即使我重新安排我的url和模板只是重用输入视图... SORRY EVERYONE。 It works fine now... 现在工作正常......


I'm running on localhost, and when I submit my form I'm getting a "CSRF token missing" error. 我在localhost上运行,当我提交表单时,我收到“CSRF令牌丢失”错误。 I've read the documentation and some stackoverflows. 我已经阅读了文档和一些stackoverflows。 I have already solved most of the common issues: 我已经解决了大多数常见问题:

  • I have the csrf token in my template (when loaded the template has inserted exactly this: <input type="hidden" name="csrfmiddlewaretoken" value=""> ) 我的模板中有csrf令牌(加载时模板已经插入了这个: <input type="hidden" name="csrfmiddlewaretoken" value="">
  • I am using render_to_response with render_to_response('_template_',{_data_:'_data_'},context_instance=RequestContext(request)) 我正在使用render_to_response和render_to_response('_template_',{_data_:'_data_'},context_instance=RequestContext(request))
  • I do have have RequestContext imported to my views 我确实已将RequestContext导入到我的视图中
  • I do have 'django.middleware.csrf.CsrfViewMiddleware' in my settings. 我的设置中有'django.middleware.csrf.CsrfViewMiddleware'

Anyone have any idea what I could be missing? 任何人都知道我可能会缺少什么?

Here is my form: 这是我的表格:

<form action="" method="post">
            {% csrf_token %}
            <input type="text" name="q">
            <input type="submit" value = "Submit">
        </form>

Here is my view: 这是我的观点:

def view_workout(request):
    errors = []
    if request.method == 'POST':
        q = request.POST['q']
        if not request.POST.get('q', ''):
            errors.append('Please complete all required fields')
            return render_to_response('swimsets/view_workout.html',{
                'error': errors
            },context_instance=RequestContext(request))
        else:
            return render_to_response('swimsets/view_workout.html',{
                'query': q
            },context_instance=RequestContext(request))

    else:

        return render_to_response('swimsets/view_workout.html', {

    },context_instance=RequestContext(request))

Here is my settings: 这是我的设置:

MIDDLEWARE_CLASSES = (
    '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',
)

您可能缺少CsrfResponseMiddleware,基于相关问题的答案是否在Django 1.2中仍然需要{%csrf_token%} CSRF保护标记?

您还可能需要将csrf导入视图中:

from django.core.context_processors import csrf

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

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