Flask学习笔记(六)-蓝图 blueprint的基本使用
一、前言
蓝图(blueprint)技术,可以帮助你实现flask应用的模块划分,在组织flask代码时,有两种模式,分别为功能式架构和分区式架构,使用蓝图,可以让项目架构更有层次,模块划分更便捷
Blueprint 具有以下属性
- 一个项目可以具有多个 Blueprint
- Blueprint 可以单独拥有自己的模板、静态文件的目录
- 在应用初始化时,注册需要使用的 Blueprint
二、BluePrint 蓝图技术
未使用蓝图技术-flask应用
flask应用里,有一个user模块专门提供和用户有关的功能,例如用户注册,登录,登出,修改密码。还有一个admin模块,用来做后台管理,本示例只是为了向你展示如何在一个脚本里编写所有的模块,因此这些视图函数并没有具体的实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | from flask import Flask app = Flask(__name__) @app.route( '/' ) def hello_world(): return 'Hello World!' # user模块 @app.route( '/user/register' ) def register(): return 'register' @app.route( '/user/login' ) def login(): return 'login' @app.route( '/user/modify_password' ) def modify_password(): return 'modify_password' # admin模块 @app.route( '/admin/alluser' ) def alluser(): return 'alluser' @app.route( '/admin/deluser' ) def deluser(): return 'deluser' if __name__ == '__main__' : app.run(port=5678) |
这个应用多了两个模块,5个视图函数,这仍然是一个非常小的flask应用。在实践项目中,子模块和视图函数会非常的多,因此,不可能将他们都写在同一个脚本里,那样的话,这个脚本会非常的大,难以维护。
1)【功能式架构】蓝图
(一个功能,一个模块组织成一个蓝图,他们共用相同的静态资源,静态资源放在static目录下)
常用功能式架构模型示例:
1 2 3 4 5 6 7 8 9 10 11 12 | __init__.py static / templates/ home/ control_panel/ admin/ views/ __init__.py home.py control_panel.py admin.py models.py |
home, control_panel,admin 都是蓝图,他们共用static和 templates。
实战小案例(基于上面flask小应用-通过蓝图进行改造):
项目结构:
1 2 3 4 5 6 7 8 | blue-example/ ├── admin │ ├── __init__.py │ └── views.py ├── app.py └── user ├── __init__.py └── views.py |
app.py代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from flask import Flask app = Flask(__name__) @app.route( '/' ) def hello_world(): return 'Hello World!' # 导入蓝图类 from admin.views import admin_blue from user.views import user_blue # 注册蓝图 app.register_blueprint(admin_blue) app.register_blueprint(user_blue) if __name__ == '__main__' : app.run(port=5678) |
admin目录下views.py示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 导入蓝图 from flask import Blueprint "" " 实例化蓝图对象 第一个参数:蓝图名称 第二个参数:导入蓝图的名称 第三个参数:蓝图前缀,该蓝图下的路由规则前缀都需要加上这个 "" " admin_blue = Blueprint( 'admin' , __name__, url_prefix= '/admin' ) # # 用蓝图注册路由-admin模块 @admin_blue.route( '/alluser' ) def alluser(): return 'alluser' @admin_blue.route( '/deluser' ) def deluser(): return 'deluser' |
user目录下views.py示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from flask import Blueprint user_blue = Blueprint( 'user' , __name__, url_prefix= '/user' ) # user模块 @user_blue.route( '/register' ) def register(): return 'register' @user_blue.route( '/login' ) def login(): return 'login' @user_blue.route( '/modify_password' ) def modify_password(): return 'modify_password' |
运行结果:
分别访问以下url进行测试:
http://127.0.0.1:5678/admin/alluser
http://127.0.0.1:5678/user/register
2)【分区式架构】蓝图
该模型适用于子模块有特殊需要的情况,在创建蓝图构造Blueprint对象时,可以指定static和templates, 其结构类似于下面这样
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | yourapp/ __init__.py admin/ __init__.py views.py static / templates/ home/ __init__.py views.py static / templates/ control_panel/ __init__.py views.py static / templates/ models.py |
这种架构下dmin, home, control_panel有各自不同的页面样式和风格,需要配置不同的静态资源,两种架构根据项目实际情况灵活运用即可
本文来自博客园,作者:橘子偏爱橙子,转载请注明原文链接:https://www.cnblogs.com/xfbk/p/16736271.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)