Flask-蓝图(blueprint)
1 没有蓝图之前前,都是单文件
2 有了蓝图可以分文件,分app,之前的请求扩展还是一样用,只是在当前蓝图对象管理下的有效
3 蓝图使用
#第一步在app中注册蓝图,括号里是一个蓝图对象 app.register_blueprint(user.us) # 第二步,在不同文件中注册路由时,直接使用蓝图对象注册,不用使用app了,避免了循环导入的问题 @account.route('/login.html', methods=['GET', "POST"])
使用示例:
目录
pro_flask/app.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from pro_flask import create_app app = create_app() if __name__ == '__main__': app.run()
pro_flask/pro_flask/__init__.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from flask import Flask def create_app(): app = Flask(__name__) app.secret_key = 'aksdsjfdkjfskdjfk' @app.route('/index') def index(): return 'index' # 导入蓝图对象 from .views.account import xaccount from .views.user import xus # 在app中注册蓝图,括号里是一个蓝图对象 app.register_blueprint(xaccount) app.register_blueprint(xus) # 如果访问的资源不是/index,则去xus和xaccount这俩蓝图里找,例如:http://127.0.0.1:5000/f1 """ # 在app中注册蓝图时,还可以带上url_prefix参数,相当于django的路由分发,则访问蓝图资源时必须带上对应前缀 app.register_blueprint(xaccount, url_prefix='/web') app.register_blueprint(xus, url_prefix='/admin') 访问示例: http://127.0.0.1:5000/admin/f1 """ return app
pro_flask/pro_flask/views/account.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from flask import Blueprint xaccount = Blueprint('xaccount', __name__) # 第一个参数是起的名字 @xaccount.route('/xaccf1') def f1(): return 'xaccf1' @xaccount.route('/xaccf1') def f2(): return 'xaccf2'
pro_flask/pro_flask/views/user.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from flask import Blueprint xus = Blueprint('xus', __name__) # 第一个参数是起的名字 @xus.route('/f1') def f1(): return 'f1' @xus.route('/f2') def f2(): return 'f2'
备注:
上述account和user蓝图中在初始时可以定制使用自己的静态文件和模板文件目录
xaccount = Blueprint('xaccount', __name__, ) ########### def __init__( self, name: str, import_name: str, static_folder: t.Optional[t.Union[str, os.PathLike]] = None, static_url_path: t.Optional[str] = None, template_folder: t.Optional[str] = None, url_prefix: t.Optional[str] = None, subdomain: t.Optional[str] = None, url_defaults: t.Optional[dict] = None, root_path: t.Optional[str] = None, cli_group: t.Optional[str] = _sentinel, # type: ignore ): super().__init__( import_name=import_name, static_folder=static_folder, static_url_path=static_url_path, template_folder=template_folder, root_path=root_path, )
4 中小型项目目录划分
项目名字 -pro_flask文件夹 -__init__.py -templates -login.html -statics -code.png -views -blog.py -account.py -user.py -run.py
5 大型项目
项目名 -pro_flask文件夹 -__init__.py -web -__init__.py -static -views.py -templates -admin -templates -static -views.py -__init__.py -run.py
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步