Django表单提交异常及管理员操作后自动跳转用户页面求助
问题1:表单提交仅部分刷新无法完成提交
先排查基础问题,再针对性处理:
- 确保表单标签包含
method="POST"和{% csrf_token %},避免CSRF验证失败或请求方式错误 - 如果用AJAX提交,必须在请求头携带CSRF令牌,同时在视图里区分AJAX与普通请求:
后端视图示例:
前端AJAX示例:def submit_application(request): if request.method == "POST": form = ApplicationForm(request.POST) if form.is_valid(): app = form.save() # 处理AJAX请求返回JSON,普通请求直接重定向 if request.headers.get("X-Requested-With") == "XMLHttpRequest": return JsonResponse({"status": "ok", "app_id": app.id}) return redirect("pending", app_id=app.id) form = ApplicationForm() return render(request, "apply.html", {"form": form})document.querySelector("#apply-form").addEventListener("submit", (e) => { e.preventDefault(); const formData = new FormData(e.target); fetch(e.target.action, { method: "POST", headers: { "X-Requested-With": "XMLHttpRequest", "X-CSRFToken": document.querySelector("[name=csrfmiddlewaretoken]").value }, body: formData }) .then(res => res.json()) .then(data => { if (data.status === "ok") { window.location.href = `/pending/${data.app_id}/`; } else { // 将表单错误渲染到页面对应位置 } }); }); - 若未使用AJAX,检查表单
action属性是否正确,避免提交到当前页面导致局部刷新
问题2:Pending页面等待后台处理后自动跳转
用轮询实现(适合新手,无需复杂配置):
- 后端新增状态检查接口:
在def check_app_status(request, app_id): app = get_object_or_404(Application, id=app_id) return JsonResponse({"status": app.status}) # 假设status字段取值:pending/approved/rejectedurls.py添加对应路由:path("check-status/<int:app_id>/", views.check_app_status, name="check_status") - Pending页面前端添加轮询逻辑:
<script> const appId = {{ application.id }}; <!-- 模板变量传入申请ID --> function pollStatus() { fetch(`/check-status/${appId}/`) .then(res => res.json()) .then(data => { if (data.status === "approved") { window.location.href = "/approved/"; } else if (data.status === "rejected") { window.location.href = "/rejected/"; } else { // 3秒后再次查询状态 setTimeout(pollStatus, 3000); } }) .catch(err => { console.error(err); // 出错后延长查询间隔,避免频繁请求 setTimeout(pollStatus, 5000); }); } // 页面加载后启动轮询 window.onload = pollStatus; </script> - 管理员在后台修改申请状态后,数据库会实时更新,轮询会获取到最新状态并自动跳转
内容的提问来源于stack exchange,提问作者Tohid Patel
相关产品推荐
相关产品推荐

