Django添加{% csrf_token %}后仍提示CSRF verification failed错误怎么办
问题根因
你的CSRF报错核心是模板里的表单配置错误导致csrf token无法正常传递给后端:
- 你给form标签设置了
enctype="text/plain"编码格式,Django CSRF校验仅支持application/x-www-form-urlencoded(表单默认编码,无需额外配置)、multipart/form-data(仅上传文件时使用)两种编码,text/plain格式不会将csrf token参数正常提交到后端,直接触发校验失败。 - form标签重复定义了
action属性,空值和index.html冲突会导致提交地址异常,也可能影响参数传递。
修复步骤
- 修改模板里的form标签代码,删除多余的
enctype和重复的action属性,修改后代码如下:
<form class="contact_info" action="" method="post">
- 修改后清空浏览器缓存,重新加载页面提交表单即可解决CSRF报错问题。
其他排查方式
如果修改后仍报错,可以按以下步骤确认:
- 打开浏览器开发者工具的网络面板,提交表单后查看对应POST请求的表单数据,确认存在
csrfmiddlewaretoken字段且有值 - 检查Django服务端session是否正常,确保Cookie里的csrftoken值和表单里的token值匹配
后续优化建议
你当前的contactView处理完POST请求后没有返回重定向,用户刷新页面会触发重复提交,建议在表单校验通过后添加重定向逻辑:
if form.is_valid(): print("FORM IS VALID") print(form.cleaned_data) # 新增重定向到当前页或者成功提示页 return redirect('leonebraiding:contact')
另外你表单里的日期、时间选择控件没有设置name属性,选中的时间值不会随表单提交到后端,需要补充对应配置才能正常接收预约时间参数。
内容的提问来源于stack exchange,提问作者Dinosahr
相关产品推荐
相关产品推荐

