我们之前学习过蓝图的使用,能够方便的将我们的业务逻辑进行切分成各个模块,这样逻辑相似的功能放在一个目录,很实用。那我们如何实现一个自己的蓝图呢?
先看一个路由
1 |
这样一个路由我们可以拆分成三个部分v1
,user
,<int:uid>
。
这里我们使用两层蓝图注册来实现上面的路由,第一层蓝图使用我们自己定义的红图来实现。
先看下实现
创建
创建我们自己的红图
1 |
|
看下实现逻辑:
我们知道蓝图的路由机制是通过route
装饰器实现的,先看下route
的源码
1 | def route(self, rule, **options): |
看下参数:
rule
就是路由,options
就是一些关键字参数,如methods
等。
这里的route
方法的主要作用就是接收一组参数传入到蓝图add_url_rule
中,实现视图函数到蓝图的注册。
我们在红图中一样要把视图函数注册到蓝图中,即调用蓝图的add_url_rule
。
因为我们要用红图的route
来代替蓝图的route
。
在源码中,我们可以直接使用self.add_url_rule
调用,我们怎么调用呢?
我们可以先将传入的参数保存进来,然后传入一个蓝图对象。在注册的时候调用add_url_rule
。
使用
在各个业务逻辑模块调用红图
下面是在user.py
模块
1 | api = Redprint('user') |
红图注册
在业务逻辑所属包的初始化模块__init__.py
中注册
1 | from flask import Blueprint |
这里我们将自己实现的红图注册到Flask
的蓝图中。
蓝图注册
实现了红图到蓝图的注册后,我们需要将蓝图注册到Flask
的核心对象上去
在工厂函数中注册
1 | from .app import Flask |
这样子 我们就完成了自定义红图,然后注册到蓝图中,最终注册到Flask
核心对象上。
ヾ(◍°∇°◍)ノ゙