flask蓝图

1572 字
4 分钟

每日一言

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

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

app/
   ├── app.py
   ├── login/
   │   ├── __init__.py
   │   └── routes.py
   ├── templates/
   │   └── login.html
   └──static/

__init__.py 的作用

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

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

from flask import Blueprint

bp = Blueprint('login', __name__)

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

routes.py的作用

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

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

一个简易的示范如下:

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了

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应用中,蓝图注册后就已经启用了,无需在主程序中进行额外设置,只需要让程序运行即可。