Flask蓝图名称是否需唯一?多包中能否使用同名bp蓝图?
可以在多个包中使用同名蓝图
完全没问题,每个包属于独立的Python模块,模块内的变量(比如bp)作用域仅限当前模块,不同包的bp是相互独立的对象,不会产生命名冲突。
举个实际的项目例子:
假设项目结构为:
my_flask_app/ ├── app.py ├── auth/ │ ├── __init__.py │ └── routes.py └── blog/ ├── __init__.py └── routes.py
在auth/routes.py中定义蓝图:
from flask import Blueprint # 这里的bp仅在auth模块内有效 bp = Blueprint('auth', __name__, url_prefix='/auth') @bp.route('/login') def login(): return '登录页面'
在blog/routes.py中定义同名变量的蓝图:
from flask import Blueprint # 这里的bp仅在blog模块内有效,和auth里的bp毫无关联 bp = Blueprint('blog', __name__, url_prefix='/blog') @bp.route('/posts') def posts(): return '博客文章列表'
最后在app.py中注册这两个蓝图:
from flask import Flask # 导入时可以用别名区分,也可以直接用原变量名,只要模块不同就不会冲突 from auth.routes import bp as auth_bp from blog.routes import bp as blog_bp app = Flask(__name__) app.register_blueprint(auth_bp) app.register_blueprint(blog_bp)
需要注意的是:创建Blueprint对象时传入的第一个参数(即蓝图的内部名称,比如上面的'auth'和'blog')必须是全局唯一的,这个名称是Flask用来识别不同蓝图的标识,和你定义的变量名bp没有关系。
内容的提问来源于stack exchange,提问作者Dante
相关产品推荐
相关产品推荐

