使用 POST 方法的表单是否需要具有 CSRF 保护?我正在关注一本书,代码示例会引发 403 错误。我做了一些搜索,似乎我需要在所有表单中启用 CSRF。
我的问题是:
Django 现在是否要求所有 POST 表单都受到 CSRF 的保护?
我需要做的就是添加'django.middleware.csrf.CsrfViewMiddleware',返回render_to_response(template,dictionary,context_instance=RequestContext(request),并在相应的表单中添加'{% 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)”吗?