Flask快速入门4-蓝图
十六,Flask 用蓝图实现模块化的应用
1,Flask 为什么使用蓝图?
Flask 中的蓝图为这些情况设计:
把一个应用分解为一个蓝图的集合。这对大型应用是理想的。一个项目可以实例化 一个应用对象,初始化几个扩展,并注册一集合的蓝图。
以 URL 前缀和/或子域名,在应用上注册一个蓝图。 URL 前缀/子域名中的参数即 成为这个蓝图下的所有视图函数的共同的视图参数(默认情况下)。
在一个应用中用不同的 URL 规则多次注册一个蓝图。
通过蓝图提供模板过滤器、静态文件、模板和其它功能。一个蓝图不一定要实现应 用或者视图函数。
初始化一个 Flask 扩展时,在这些情况中注册一个蓝图。
Flask 中的蓝图不是即插应用,因为它实际上并不是一个应用——它是可以注册,甚至 可以多次注册到应用上的操作集合。
为什么不使用多个应用对象?你可以做到那样 (见 应用调度 ),但是你的应用的配置是分开的,并在 WSGI 层管理。
蓝图作为 Flask 层提供分割的替代,共享应用配置,并且在必要情况下可以更改所 注册的应用对象。
它的缺点是你不能在应用创建后撤销注册一个蓝图而不销毁整个 应用对象。
2,Flask 我的第一个蓝图
一般蓝图项目代码文件结构如下:
蓝图实际类似于模块分类,bluePrint 目录下是蓝图模块代码文件,需要有一个 ./bluePrint/__init__.py 文件,这个文件名不能改 ;
还一个具体实现蓝图的方法模块文件如: ./bluePrint/views.py,这个名称随便。
./bluePrint/__init__.py :
from flask import Blueprint #蓝图命名 blue_task = Blueprint("blue_task", __name__) #导入蓝图的具体实现模块 from . import views
./bluePrint/views.py :
from . import blue_task from flask import Flask,render_template #这里就使用蓝图命名的路由了 blue_task,就不用app.route进行路由,避免出现循环路由(特别是随着项目模块的增加) @blue_task.route("/tasks",methods=['POST','GET']) def index(): return "hello world,Blueprint!\n" #这里就使用蓝图命名的路由了 blue_task,就不用app.route进行路由,避免出现循环路由(特别是随着项目模块的增加) @blue_task.route('/tasks/index',methods=['POST','GET']) def books(): return render_template('task.html')
在bluePrint 目录同级别下也要有一个 ./__init__.py 文件,这个文件名不能改 和一个启动应用文件如:./bluePrintMain.py,这个名称随便。
./__init__.py :
from flask import Flask #创建一个蓝图app def create_app(): app = Flask(__name__) # 导入蓝图模块 from .bluePrint import blue_task # 注册蓝图 app.register_blueprint(blue_task) return app
./bluePrintMain.py :
from . import create_app app = create_app() if __name__ == '__main__': #启动app app.run()
./templates/task.html :
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>task</title> <style> div { width:200px; height:200px; background: khaki; border:2px solid #000000; } </style> </head> <body> <div>我是蓝图:tasks</div> </body> </html>
以上,基本上Flask入门知识点学会了,差不多能看懂Flask项目了,Flask框架还是很简单的非常适合入门web框架,当然需要实战项目深入理解才能掌握更多。
----------------------------------------------------------------------------end----------------------------------------------------------------------------