Flask-Blueprint

blueprint把不同功能的module分开。可以让应用模块化,针对大型应用。
蓝图的基本概念:在蓝图被注册到应用之后,所要执行的操作的集合。当分配请求时, Flask 会把蓝图和视图函数关联起来,并生成两个端点之前的 URL 。
比如只有一个run.py。有些功能需要多人分开来写,有些功能会有交错的可能,代码位置也不会在一起,这样可以用蓝图来开关一些模块(功能)和宏定义类似,但不是可插拔的应用而是一套可以注册在应用中的操作,并且可以注册多次。或者简单滴需要降低耦合,提高模块复用率。比如开发环境和应用环境的不同,可以用蓝图来切换环境。
蓝图的缺点是一旦应用被创建后,只有销毁整个应用对象才能注销蓝图。
下面是一个最精简的例子:

├── my_flasky
     ├── app
          ├── __init__.py
          └── main
              ├── __init__.py
              └── views.py
     └── manage.py

==================================================================
my_flasky/app/__init__.py
    #encoding:utf8
    from flask import Flask
    def create_app():
        app = Flask(__name__)
        #从/main/__init__.py中获取蓝图,并注册蓝图
        from .main import main as main_blueprint
        app.register_blueprint(main_blueprint)
        return app

=================================================

my_flasky/app/main/__init__.py
    #encoding:utf8
    from flask import Blueprint

    main = Blueprint('main',__name__) #main为蓝本名称,__name__为蓝图所在的模块或者包

    #切记最后再导入main文件包下的模块,以防止循环导入报错
    from . import views
=================================================================

my_flasky/app/main/views.py

    #encoding:utf8

    from . import main #导入蓝图

    @main.route('/')
    def index():
            return '

我的蓝图

' ==================================================================== my_flasky/manage.py #encoding:utf8 from app import create_app app = create_app() if __name__ == '__main__': app.run(host='0.0.0.0',port=80,debug=True)

本例实现了一个最简单的flask示例,它实现的功能和以下代码一样:

#encoding:utf8
from flask import Flask

app = Flask(__name__)
def index():
    return '

我的蓝图

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

这个确实简单的不是一丁点,但是为什么要写成上面的格式呢?
对于简单的例子或许看不出来,但是稍微复杂一点的flask应用肯定不是一个人能完成的,所以就需要分工,一人负责一块,而Blueprint就是负责组装它们的,实现模块化管理,要想学好flask这东西肯定是绕不过去的。
实现过程(以例一为例):1,在视图模块所在的包(main)内创建蓝本,并将所有的视图模块(views.py)导入;2,在存放视图模块包的目录下(app)构造create_app函数,在函数里完成蓝本的注册,可以注册多个;3,在根目录(my_flasky)中通过调用2中构造的函数创建启动脚本(manage.py)。
大概就是这样:
views.py(可以多个)—>main(可以多个)—>app(就一个)—>manage.py

你可能感兴趣的:(python)