Flask登录链接偶发跳转到/而非/auth/login的原因排查
Flask蓝图路由偶发跳转异常排查
应用配置与场景
- 基于Flask开发,采用Blueprint做模块化路由管理:
main蓝图负责首页路由auth蓝图处理认证相关路由(如/auth/login)
- 蓝图注册代码:
app.register_blueprint(main) app.register_blueprint(auth, url_prefix='/auth')
- Jinja2模板中登录链接的写法:
<a class="nav-link active" href="{{ url_for('auth.login') }}">Login</a>
问题现象
- 预期行为:点击登录链接应稳定跳转到
/auth/login - 实际异常:偶发跳转到根路径
/,或URL末尾追加/?;多浏览器及无痕模式下均出现该问题,已排除浏览器缓存影响
已完成的排查动作
- 代码内直接调用
url_for('auth.login'),打印结果始终为正确的/auth/login,路径生成逻辑无问题 - 添加全局请求前置日志:
@app.before_request def log_request_info(): print(f"Path: {request.path}, Method: {request.method}")
日志显示请求路径有时为/,有时为/auth/login
3. 检查auth.login视图代码,无主动跳转到/的条件逻辑
4. 已清除所有浏览器缓存
附auth.login路由代码
auth: Blueprint = Blueprint('auth', __name__, template_folder='templates') @auth.route('/login', methods=['GET', 'POST']) def login() -> werResponse | str: try: form: LoginForm = LoginForm() if request.method == 'POST' and form.validate_on_submit(): user: User = db.session.query(User).filter(User.nick == form.nick.data).first() # type: ignore[attr-defined] if user and check_password_hash(user.password, form.password.data): login_user(user) return redirect(url_for('main.index')) else: flash('Wrong nick or password!') except TemplateNotFound: flash(f'Error{form.errors}') finally: return render_template('login.html', login=True, form=form)
疑问
为何url_for('auth.login')会偶发解析为/而非/auth/login?是否存在特定触发条件?
内容的提问来源于stack exchange,提问作者Vronst
相关产品推荐
相关产品推荐

