Flask redirect重定向不生效,同时出现未定义undefined路由404如何解决?
Flask重定向触发额外undefined路由404问题解决方案
核心根因(90%概率属于第一种场景)
你触发重定向的请求是前端异步请求(AJAX/Fetch/Axios等),而非浏览器同步表单提交:
- 后端返回302重定向响应时,浏览器会自动先跟随重定向请求
/verify_account/verify_sms,返回200状态码 - 你的前端JS代码中同时写了手动跳转逻辑,比如
window.location.href = res.data.url这类代码,但后端没有返回跳转地址给前端,拿到的url值为undefined,相对路径拼接后就生成了/verify_account/undefined的错误请求,导致跳转失败
解决方案
场景1:请求为异步请求
后端不要返回redirect重定向,改为返回带跳转路径的JSON响应:
if val: print("val true",val) return {"code": 0, "redirect_url": url_for('users.verify_sms_otp')}
前端收到响应后手动执行跳转:
// 以axios为例 axios.post('/your/current/route', data).then(res => { if (res.data.code === 0) { window.location.href = res.data.redirect_url } })
场景2:请求为同步表单提交
按以下顺序排查:
- 检查
EnterMobileOTP.html模板内的所有静态资源引用,有没有使用未定义的变量拼接路径,比如<img src="{{ undefined_var }}">这类写法,渲染后会生成src="undefined",相对路径会自动拼接当前路由前缀,触发404请求 - 检查蓝图
users的url_prefix配置是否符合预期,确保url_for('users.verify_sms_otp')生成的路径确实是/verify_account/verify_sms,可以在代码中打印该值验证 - 确认没有全局请求拦截器/中间件修改了重定向响应的地址
内容的提问来源于stack exchange,提问作者Nur Amin Sifat
相关产品推荐
相关产品推荐

