如上图所示,在用表单提交post数据时出现了403,而用get方式提交表单数据时就没有存在上述问题。经过查阅资料,出现上述403错误的原因是Django对csrf的防护措施。要使表单正确的提交POST数据,需采取一下措施:
1、检查settings.py配置文件中的MIDDLEWARE_CLASSES参数中是否存在django.middleware.csrf.CsrfViewMiddleware,如果不存在就添加。
2、修改视图函数,使用RequestContext而不是Context
from django.template import Context,RequestContext
def form(request):
if 'q' in request.POST:
return HttpResponse('input is %s' %request.POST['q'])
else:
return render_to_response('form.html',{},context_instance=RequestContext(request))
3、在form表单所在的模板中添加{% csrf_token %}标签
<head>
<title>表单提交</title>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<input type="text" name="q" >
<input type="submit" value="提交" />
</form>
</body>
ps:采取上面三个措施之后,进行POST数据提交就不会出现403错误了。此时查看生成的form表单,可以看到Django为表单添加了一个隐藏字段来防止CSRF攻击。
转载请注明:jinglingshu的博客 » Django表单提交出现 CSRF verification failed. Request aborted


