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