Fork me on GitHub

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有各自不同的页面样式和风格,需要配置不同的静态资源,两种架构根据项目实际情况灵活运用即可

  

  

 

posted @   橘子偏爱橙子  阅读(701)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示