🍖Flask蓝图 (Blueprint)

Flask蓝图 (Blueprint)

1.蓝图作用

  • 一般做测试的时候我们习惯将所有的程序 : 视图函数, 路由, 入口等放在一个 py 文件中
  • 但如果视图函数成千上百个, 那是不是会显得运行文件特别乱, 我们是不是应该抽取出来专门的 py 文件来进行管理呢
  • 这个时候蓝图就派上用场了, 我们可以利用蓝图对程序目录进行划分

2.不使用蓝图, 手动分文件

  • 目录结构
-templates  # 模板文件
-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,request
from . import account  # 必须导
from . import order
from . import user

app = Flask(__name__)
  • views/user.py
from . import app
@app.route('/user')
def user():
    return 'user'
  • views/order.py
from . import app
@app.route('/order')
def order():
    return 'order'

3.蓝图基本使用命令

  • 导入蓝图
from flask import Blueprint
  • 创建蓝图对象
user_bu = Blueprint('user',__name__)    # user.py
order_bu = Blueprint('order',__name__)  # order.py
  • 创建蓝图参数 : url_prefix 前缀
user_bu = Blueprint('user',__name__,url_prefix='/user',template_folder='views_templates')
# 使用url_prefix参数为访问视图的路径添加一个前缀,可以更加方便的管理视图函数
# 比如之前访问的路径是 : 127.0.0.1:5000/login/
# 那么添加之后访问的路径是 : 127.0.0.1:5000/user/login/
  • 创建蓝图参数 : template_folder 指定templates
# 使用 template_folder 参数给当前蓝图单独使用templates
# 向上查找,当前找不到,会找总 templates 文件夹
  • 利用蓝图创建路由关系
@user_bu.route('/login/')   # user.py
@order_bu.route('/chaeck_order/')  # order.py
  • 注册蓝图
app.register_blueprint(user_bu)
app.register_blueprint(order_bu)

4.使用蓝图构建中小型系统目录示例

  • 目录结构
-flask_pro
    -flask_app
    	-__init__.py
    	-static
        -templates
        -views
            -order.py
            -user.py
    -manage.py 
  • __init__.py
from flask import  Flask
app=Flask(__name__)
from flask_app.views import user
from flask_app.views import order
app.register_blueprint(user.user_bu)
app.register_blueprint(order.order_bu)
  • manage.py
from flask_app import  app
if __name__ == '__main__':
    app.run(port=8008)
  • user.py
from flask import Blueprint
user_bu=Blueprint('user',__name__)

@user_bu.route('/login')
def login():
    return 'login'
  • order.py
from flask import Blueprint
order_bu=Blueprint('order',__name__)

@order_bu.route('/test')
def test():
    return 'order test'

5.使用蓝图构建大型系统

  • 所谓的大型并不是真正的大型, 只是做一个参考, 毕竟我们更愿意使用 Django 去创建大型项目

  • 目录结构

│  run.py  
│
│
└─pro_flask  # 文件夹
    │  __init__.py 
    │
    ├─admin        # admin应用文件夹
    │  │  views.py # 视图
    │  │  __init__.py
    │  │
    │  ├─static     # 静态资源文件夹
    │  └─templates  # 模板文件夹
    │
    └─web           # web应用文件夹
       │  views.py  # 视图
       │  __init__.py
       │
       ├─static    # 静态资源文件夹
       └─templates # 模板文件夹

posted @ 2021-06-04 23:07  给你骨质唱疏松  阅读(46)  评论(0编辑  收藏  举报