Django 1.2.4 CSRF验证失败

时间:2011-01-23 16:54:01

标签: django csrf django-csrf csrf-protection

当我执行POST表单时,Django 1.2始终向我提供此CSRF验证错误。我“想”我已经完成了Django 1.2文档中提到的所有事情,即

  1. 确保MIDDLEWARE_CLASSES包含在'django.middleware.csrf.CsrfViewMiddleware'中

  2. 确保{%csrf_token%}

    <form action="/words/new/" method="post">
    {% csrf_token %}
    {{ form.as_p }}
        <input type="submit" value="Enter" />
    </form>
    
  3. 在我的回复中使用RequestContext

    def create(request):
        if request.method == 'POST':
            form = DefinitionForm(request.POST)
            if form.is_valid():
                form.save()
            c = {}
            return render_to_response('dict/thanks.html',c, 
                                        context_instance=RequestContext(request))
        else:
            form = DefinitionForm()
        return render_to_response('dict/create_definition.html', {
            'form' : form,
        })
    
  4. 请注意,GET操作适用于此功能。所以我认为我正在使用render_to_response。

    我甚至试图投入@csrf_protect装饰器甚至那似乎没有用。我没有想法,我就要用笔记本电脑掐自己了。

    你们能想到的任何事情?

    谢谢!

1 个答案:

答案 0 :(得分:7)

你没有关注#3。 RequestContext必须与显示表单的模板的呈现一起使用。谢谢页面没有必要。

return render_to_response('dict/create_definition.html', {
    'form' : form,
}, context_instance=RequestContext(request))

作为旁注,您应该使用PRG pattern而不是直接呈现感谢页。