前提
- 了解
Flask的基本操作
蓝图
一、什么是蓝图(Blueprints)
Blueprints 是 Flask 提供的一个类,用于注册 Flask 实例,是路由分类的一个工具。
二、蓝图的创建
在项目目录中,创建多个蓝图 package 用来管理不同的模块。比如:
admin
├── __init__.py
├── admin.py
├── auth.py
└── home.py
# home.py
from flask import Blueprint
home_admin = Blueprint('home', __name__)
@home_admin.route('/index')
def index():
return '这是首页'
@home_admin.route('/hi')
def hi():
return '你好啊啊!!'
首先,导入了蓝图并通过它创建了 home_admin 实例,第一个参数是蓝图的 名称 ,第二个参数是模块的名称( __name__ 是变量)。
三、注册蓝图
在上一步中,创建好了一个蓝图(分路由)。现在将蓝图注册到你的 Flask 实例中:
# index.py
from flask import Flask
from mysystem.blueprints.home import home_admin
app = Flask(__name__)
# app.register_blueprint(home_admin) # 注册蓝图
app.register_blueprint(home_admin, url_prefix='/home') # 添加URL前缀
测试文件运行请查看 python打造个人管理系统01-创建初始项目
现在,就可以进行访问了:
四、蓝图 Endpoint
在命令行中,使用命令 flask routes ,可以查看路由信息:

可以看到,其中有个叫 Endpoint 的东西,它是干嘛的?
其实,当我们访问 http://127.0.0.1:5000/home/hi 的时候,它并不是直接映射 hi() 的方法,而是通过 Endpoint 来做映射,也就是这样:
/home/hi --> home.hi --> hi()
这样的好处就是可以很容易的区分在不同蓝图中的同名路由。
所以,当你用 url_for() 来获取 URL 的时候,可以通过 Endpoint 来获取:
url_for('home.hi') # 在其他蓝图下
url_for('.hi') # 在自身蓝图下
五、蓝图的资源
如果每个蓝图的样式不统一,我们可以将其对应的静态文件放在相应的蓝图下,即在蓝图下创建子包统一管理资源。
admin
├── __init__.py
├── admin.py
├── auth.py
└── home.py
就会变成这样:
admin
├── __init__.py
├── admin.py
├── auth.py
└── home
├── init.py
├── home.py
├── static
│ └── home.css
└── templates
└── home.html
想要引用这些资源,只要在创建蓝图的时候默认定义:
home_dp = Blueprint('home', __name__, template_folder='tempaltes', static_folder='static')
总结
本文介绍了蓝图的一些基本操作,不纳入项目的一部分。
- 创建蓝图
- 注册蓝图
- 蓝图的工作过程
- 蓝图的资源引用
python打造个人管理系统04-Flask中蓝图的使用
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法