Flask蓝图

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的概念

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾维斯Echo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值