Django:POST表单需要CSRF? GET不?

使用POST方法需要CSRF保护的表单吗? 我正在阅读一本书,代码示例抛出了403错误。 我做了一些搜索,似乎我需要在我的所有表单中启用CSRF。

我的问题是:

  • Django现在是否要求所有的POST表单都受到CSRF保护?

  • 我需要做的是添加'django.middleware.csrf.CsrfViewMiddleware',返回render_to_response(模板,字典,context_instance = RequestContext(请求),并在相应的表单中添加'{%csrf_token%}'?在这里丢失什么?

  • 当我这样做时,表单工作正常。 当这些作品中的任何一件丢失时,它将失败到403.我只是想确保我正确地做它。 :)

    提前致谢。

    编辑:

    出于某种原因,这段代码对我来说没有意义,但它不会返回任何错误。 请忽略原始验证,因为我没有看到本书的部分,它显示了更有效的方法。

    def contact(request):
        errors = []
    
        if request.method == 'POST':
            if not request.POST.get('subject',''):
                errors.append('Enter a subject')
            if not request.POST.get('message',''):
                errors.append('Enter a message')
            if request.POST.get('email', '') and '@' not in request.POST['email']:
                errors.append('Enter a valid email address')
            if not errors:
                send_mail(
                    request.POST['subject'],
                    request.POST['message'],
                    request.POST.get('email', 'noreply@example.com'), ['siteownder@example.com'],)
                return HttpResponseRedirect('/contact/thanks/')
    
        return render_to_response('contact_form.html', { 'errors': errors }, context_instance=RequestContext(request))
    

    我的问题是这个视图函数的最后一行。 只有在request.method!= POST时才被调用。 这对我来说似乎完全错误。 我在做POST时不应该调用“context_instance = RequestContext(request)”吗?


    POST应该用于敏感信息,例如密码,并且django需要使用csrf_token保护它; GET应该用于不需要被保护的可加入书签的东西,比如搜索。 你正在做正确的事。

    编辑

    您在执行POST时不应该调用context_instance=RequestContext(request) ,无论请求类型如何,都应该调用它。 看这个样子:

  • 它是一个POST吗? 这意味着表单已提交。 我们验证表单,如果表单正常,则将用户重定向到另一个页面,或者将错误再次显示给用户。
  • 它是GET吗? 这意味着表单没有提交,但其他的东西正在发生,我们不关心(一些引荐链接或其他东西)。 无论如何显示表格
  • 无论if如何,以斜体进行的操作均由最后一次返回完成。

    链接地址: http://www.djcxy.com/p/56519.html

    上一篇: Django: POST form requires CSRF? GET doesn't?

    下一篇: CSRF token missing or incorrect even though I have {% csrf