当前位置:  开发笔记 > 后端 > 正文

Django:POST表单需要CSRF吗?GET没有?

如何解决《Django:POST表单需要CSRF吗?GET没有?》经验,为你挑选了1个好方法。

使用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)"吗?



1> Gabi Purcaru..:

POST应该用于敏感信息,例如密码,django需要用csrf_token保护它; GET应该用于不需要保护的可收藏的内容,例如搜索.你做得对.

编辑

您不应该context_instance=RequestContext(request)在进行呼叫时POST进行呼叫,无论请求类型如何,都应该呼叫它.看看它是这样的:

是一个POST吗?这意味着表单已提交.我们验证表单,如果表单正常,则将用户重定向到另一个页面,或者再次向用户显示表单,并显示错误.

是一个GET吗?这意味着表单没有提交,但其他的东西正在发生,我们不关心(一些推荐链接或其他东西).无论如何要显示表格

斜体的操作由最后一次返回完成,无论if是什么.


.
推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有