为什么Flask项目中auth.py定义的/login、/register路由无法访问
Flask 访问auth.py定义路由返回404的解决方案
问题根因
- 你的
app.py中从未导入auth.py模块,auth.py内的路由注册代码从未执行,Flask无法感知这两个路由的存在。 auth.py中直接通过current_app绑定路由的方式错误:current_app是Flask的上下文代理对象,仅在应用上下文/请求上下文激活时才能指向实际运行的app实例,模块加载阶段上下文未激活,此时绑定的路由不会挂载到你创建的app实例上。
修复方案
方案一:推荐使用Flask蓝图规范实现多文件路由管理
步骤1:修改auth.py,改用蓝图注册路由
from flask import Blueprint, render_template # 初始化auth蓝图 auth_bp = Blueprint('auth', __name__) @auth_bp.route("/login") def login(): return render_template("login.html") @auth_bp.route("/register") def register(): return render_template("register.html")
步骤2:修改app.py,注册auth蓝图
from flask import Flask, render_template app = Flask(__name__) @app.route("/home") def home(): return render_template("index.html") @app.route("/profile") def profile(): return render_template("profile.html") # 导入并注册auth蓝图 from auth import auth_bp app.register_blueprint(auth_bp)
方案二:临时快速修复(不推荐,仅用于极小项目快速验证)
该方式容易出现循环导入问题,仅适合临时测试使用。
- 修改auth.py的导入语句,直接从app.py导入app实例:
from app import app from flask import render_template @app.route("/login") def login(): return render_template("login.html") @app.route("/register") def register(): return render_template("register.html")
- 在app.py的
app = Flask(__name__)语句之后,添加导入auth的代码:
app = Flask(__name__) import auth
修改完成后重启服务即可正常访问/login和/register路径。
内容的提问来源于stack exchange,提问作者user13041346
相关产品推荐
相关产品推荐

