Flask Blueprint 蓝图

 

蓝图介绍

- 蓝图:

蓝图的存在的目的,就是为了给开发者提供一个目录结构;

- 简单的示例:
|-crm
    |-crm
        |-__init__.py
        |-views
            |-accout.py
            |-user.py
            |-...
        |-templates
        |-static
    |-manage.py

 

- 目录结构的简单分析:

- 目录结构解析:
    - __init__.py 文件中用来实例化 Flask对象,并且注册blueprint
        - 导入视图函数中实例化的Blueprint对象
        - 注册blueprint:
            app.register_blueprint(Blueprint对象)
            - 为某一个视图函数添加前缀:
                app.register_blueprint(Blueprint对象, url_prefix="/xxx")
    - views文件用来写路由的逻辑,
        - 里面的py文件中,此时需要实例化 Blueprint对象
    - templates 放模板
    - static 放静态文件
    - manage.py 作为入口文件。导入 __init__ 里面的实例化Flask对象.run()

 

创建蓝图

- 蓝图实际上也可以理解为是一个 不能执行 run() 的Flask对象,基本用法与Flask一样:

 

- 创建蓝图示例:

# 导入蓝图
from flask import Blueprint

# 实例化蓝图对象
app = Blueprint("get", __name__, url_prefix="/student")


# 注册路由,视图函数
@app.route("/get_students", strict_slashes=False)
def get():
    return "hello, get all students"

 

- Blueprint类:

  - 参数解析:

name:是该蓝图的唯一标识;反向解析时,能够准确的找到蓝图下的视图url
import_name: 当前的文件名
url_prefix: 路由前缀;区分路由

...
其他的与Flask类的参数一致;

 

  - __init__ 源码:

    def __init__(self, name, import_name, static_folder=None,
                 static_url_path=None, template_folder=None,
                 url_prefix=None, subdomain=None, url_defaults=None,
                 root_path=None):
        _PackageBoundObject.__init__(self, import_name, template_folder,
                                     root_path=root_path)
        self.name = name
        self.url_prefix = url_prefix
        self.subdomain = subdomain
        self.static_folder = static_folder
        self.static_url_path = static_url_path
        self.deferred_functions = []
        if url_defaults is None:
            url_defaults = {}
        self.url_values_defaults = url_defaults

 

 - Flask中注册蓝图:

  - app.register_blueprint(蓝图对象)

    - 每创建一个蓝图就需要在Flask的实例对象中进行注册;

  - 实例:

"""
main.py
"""
from flask import Flask

from blueprint import get

app = Flask(__name__)
app.config.from_object(DebugSetting)
app.register_blueprint(get.app)

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


"""
./blueprint/get.py
"""
# 导入蓝图
from flask import Blueprint

# 实例化蓝图对象
app = Blueprint("get", __name__, url_prefix="/student")


# 注册路由,视图函数
@app.route("/get_students", strict_slashes=False)
def get():
    return "hello, get all students"

 

 

蓝图中的视图

- 注册视图与路由时与正常的相同;

- 注意访问时,蓝图中是否加有前缀;(url_prefix参数)

- strict_slashes:对于路由最后的斜杠是否要求

  - False 不要求

  - True 要求

posted @ 2018-11-21 13:45  浮生凉年  阅读(270)  评论(0编辑  收藏  举报