04.Flask蓝图
作用:对程序进行目录结构划分
一、不使用蓝图、自己分文件
目录结构
-templates
-views
-__init__.py
-user.py
-order.py
-app.py
app.py
from views import app
if __name__ == '__main__':
app.run()
init.py
from flask import Flask,request
app = Flask(__name__)
#不导入这个不行
from . import account
from . import order
from . import user
user.py
from . import app
@app.route('/user')
def user():
return 'user'
order.py
from . import app
@app.route('/order')
def order():
return 'order'
二、使用蓝图分文件
目录结构
flask_project/
├── templates
├── __init__.py
├── views
├── __init__.py
├── user.py
└── order.py
└── app.py
app.py
from views import app
if __name__ == '__main__':
app.run()
views/init.py
from flask import Flask
app = Flask(__name__)
from . import order
from . import user
# 第一步在app中注册蓝图,括号里是一个蓝图对象
# 第二步,在不同文件中注册路由时,直接使用蓝图对象注册,不用使用app了,避免了循环导入的问题
app.register_blueprint(user.us)
app.register_blueprint(order.ord)
views/user.py
from flask import Blueprint
us = Blueprint('user', __name__) # 以后再注册路由,使用蓝图对象,app对象有什么,蓝图对象就有什么
@us.route('/user')
def user():
return 'user'
views/order.py
from flask import Blueprint
ord = Blueprint('order', __name__)
# 提示:
'''
只有在访问该蓝图对象的路由时before_request才会触发执行
如: https://127.0.0.1:5000/order.
如果访问的是user中的蓝图, 或者app中的路由, 并不会触发before_request的执行
'''
@ord.before_request
def before():
print('order-before_request')
@ord.route('/order')
def order():
return 'order'
三、使用蓝图之中小型系统
详见代码,如下:pro_flask_简单应用程序目录示例.zip
蓝奏云:https://taoxiaoxin.lanzoui.com/b01ua66ji
密码:ddws
目录结构:
-flask_pro
-flask_test
-__init__.py
-static
-templates
-views
-order.py
-user.py
-manage.py
_init.py
from flask import Flask
app=Flask(__name__)
from flask_test.views import user
from flask_test.views import order
app.register_blueprint(user.us)
app.register_blueprint(order.ord)
manage.py
from flask_test import app
if __name__ == '__main__':
app.run(port=8008)
user.py
from flask import Blueprint
us=Blueprint('user',__name__)
@us.route('/login')
def login():
return 'login'
order.py
from flask import Blueprint
ord=Blueprint('order',__name__)
@ord.route('/test')
def test():
return 'order test'
四、使用蓝图之大型系统
详见代码:pro_flask_大型应用目录示例.zip
蓝奏云:https://taoxiaoxin.lanzoui.com/b01ua66ji
密码:ddws
总结:
1 xxx = Blueprint('account', __name__,url_prefix='/xxx')
:蓝图URL前缀,表示url的前缀,在该蓝图下所有url都加前缀
2xxx = Blueprint('account', name,url_prefix='/xxx',template_folder='tpls'):
给当前蓝图单独使用templates,向上查找,当前找不到,会找总templates
3 蓝图的befort_request
,对当前蓝图有效
4 大型项目,可以模拟出类似于django中app的概念