flask蓝图

每日一言

What is truly good about a person can’t be expressed in words, that it can not. What matters is the feeling of trust one gets after spending time with him. – Kenshin Himura
from Rurouni Kenshin

什么是flask蓝图?

flask蓝图是一种组织代码的方式,允许你将flask应用分解为多个模块。这样可以更好的组织应用逻辑,使得应用更具可维护性和可扩展性。

每个蓝图可以有自己的路由、视图函数、模板和静态文件,这样可以将相关功能分组。

创建蓝图

对于每个蓝图,我们将其放在一个单独的子目录中,确保每个蓝图的内容相互分离,每个模块的功能相互独立。

比如我们的网站有一个单独的功能是登录,则我们可以在项目目录下创建一个单独的文件夹,命名为login

最简单蓝图需要我们创建创建两个文件:

1
2
3
4
5
6
7
8
app/
├── app.py
├── login/
│ ├── __init__.py
│ └── routes.py
├── templates/
│ └── login.html
└──static/

__init__.py 的作用

pyhon将一个文件夹中python文件当作一个package即一个包,一个包中的python程序就类似我们从pip包管理器中下载的包一样。当我们导入一个包时,python程序会默认执行包中的 __init__.py 文件。

所以我们通常在 __init__.py文件中对于蓝图进行注册:

1
2
3
4
5
6
from flask import Blueprint

bp = Blueprint('login', __name__)

from . import routes # 导入路由,必须在蓝图创建后导入,否则模块还没初始化就被导入,会报错

routes.py的作用

routes.py的作用主要是:定义模块中的各路由以及视图函数。

蓝图中路由的路径在进行注册时可以添加前缀,所以无需担心与其他蓝图中的路由重复。

一个简易的示范如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
from flask import render_template, request, redirect, url_for
from . import bp #导入蓝图

@bp.route('/')
def login():
return render_template('login.html')

@bp.route('/submit', methods=['POST'])
def submit():
name = request.form.get('name')
email = request.form.get('email')
return render_template('successful_login.html', name=name, email=email)

蓝图中也可以使用 templates 模板,static 静态文件等内容,不过所有的模板和static都默认需要放在主Flask应用的目录下。

注册蓝图

现在我们已经写好了一个基本的注册功能的蓝图,接下来需要的就是有将他导入主Flask程序,然后运行起来就ok了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from flask import Flask
from login import bp as login #导入蓝图,并且重新命名,这在导入多个蓝图时需要给每个蓝图重新命名


app = Flask(__name__)

app.register_blueprint(login, url_prefix='/login') # 注册蓝图,并给蓝图中的路由添加一个前缀

@app.route('/')
def hello_world():
return 'Hello, World!'

if __name__ == '__main__':
app.run(debug=True)

在Flask应用中,蓝图注册后就已经启用了,无需在主程序中进行额外设置,只需要让程序运行即可。


flask蓝图
http://blog.ulna520.com/2025/03/06/flask蓝图_20250306_153654/
Veröffentlicht am
March 6, 2025
Urheberrechtshinweis