Django表单提交始终进入非POST分支,POST调用无法生效如何解决?
问题根因
你的表单默认以GET方式提交,且缺失Django要求的POST校验凭证,导致无法进入POST分支:
- HTML的
<form>标签未指定method="post",浏览器默认使用GET方式提交请求,request.method取值为GET,自然进入else分支 - Django默认开启CSRF校验,POST请求必须携带CSRF令牌,否则会被拦截,你的表单中没有添加对应的模板标签
修复步骤
- 调整HTML表单的
<form>标签属性,添加method="post" - 在表单内部任意位置添加Django CSRF模板标签
{% csrf_token %}
修改后的表单开头代码示例
<form style="margin-top: 10px;" method="post"> {% csrf_token %} <!-- 原有表单内容保持不变 -->
可选排查项
如果修改后仍有问题,可按以下顺序排查:
- 检查路由配置,确认表单提交的路径和
ATFrun视图的路由完全匹配,注意末尾斜杠、test_case_ID参数传递是否正确 - 打开浏览器开发者工具的「网络」标签,提交表单后查看请求方法是否为POST,状态码是否为200/302而非403/404
内容的提问来源于stack exchange,提问作者Rituparna Das
相关产品推荐
相关产品推荐

