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