Flask 之蓝图

Flask的路由机制十分的巧妙。

入门的普通用法是直接

@app.route("/path")
def method_name():
    pass

这样的话预示着我们只能在单文件进行路由分发吗?

答案当然是否定的,Flask为我们提供了一个叫做Blueprint的东西。

在开始之前,顺上我的目录结构,让读者更清晰的阅读:

├── __init__.py
├── __pycache__
├── blueprint
│   ├── __init__.py
│   ├── __pycache__
│   └── test.py
└── flask_test.py

直接上代码先看洗脑,flask_test.py文件:

from flask import Flask

app = Flask(__name__)

def register_blueprint(app):
    from test.blueprint import blueprint
    app.register_blueprint(blueprint)

register_blueprint(app)

if __name__ == "__main__":
    app.run(port=8081)

可以看到以上代码中,有一个register_blueprint函数,需要传入形参app。然后我们调用了它,传入了实参app(实例化的flask对象)。

然后导入了一个blueprint,并且将其通过 flask对象的register_blueprint函数将其注册到flask对象中。

接下来我们进入blueprint/__init__.py中看一下代码:

from flask import Blueprint

blueprint = Blueprint('test', __name__, url_prefix="/test")

from test.blueprint import test

可以看到,__init__.py中实例化了一个Blueprint对象blueprint(具体的实例化参数,请阅读源码或者文档,又或者在评论区进行提问),然后引入了一下blueprint文件夹下面的test.py文件。现在我们看看test.py里做了什么。

from test.blueprint import blueprint

@blueprint.route("/test")
def test_blueprint():
    return "Hello Blueprint!"

可以看到test.py做的事情,很简单,它引入了__init__.py里的blueprint这个实例化对象。然后定义了一个函数,并加上了路由装饰器。这个步骤是简单的,跟我们普通的注册路由完全没有区别,唯一的区别就是从app变成了blueprint这个Blueprint对象。

在做完这些操作之后,回到flask_test.py run一下。然后打开浏览器,输入127.0.0.1:8081/test/test 即可看到 "Hello Blueprint!" 字样,如此一来,相信你就能知道Blueprint 的用法了。我这里也来总结一下:

  1. __init__.py创建Blueprint对象。
  2. 创建对应的路由分发文件,引入创建好的Blueprint对象,进行函数定义和路由装饰。
  3. __init__.py文件引入创建好的路由分发文件。
  4. 在创建flask对象的文件内引入创建Blueprint对象的包的__init__.py文件里的Blueprint对象(python导入包默认是引入的__init__.py)。
  5. 将导入的Blueprint对象通过register_blueprint函数注册到flask对象里(我这里的代码里是app)。
  6. 启动项目即可打开浏览器看到效果。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!