15---flask的蓝图

上一篇 文章说到用装饰器的方法能够解决模块划分但是有一个问题就是路由和视图函数之间的关系并不直观,蓝图的存在解决了这个问题

文章目录

  • 蓝图的基本定义和使用
      • 给蓝图设置url前缀
  • 以目录形式定义蓝图
  • 蓝图里模板目录的处理

蓝图的基本定义和使用

首先在orders.py里面定义一个蓝图

# encoding=utf-8
__author__ = "zhangyue"

from flask import Flask,Blueprint

# 创建一个蓝图的对象,蓝图就是一个小模块的抽象的概念
app_orders = Blueprint("app_orders",__name__)

@app_orders.route("/get_orders")
def get_orders():
    return "get_orders page"

然后在main.py里面导入oders里的蓝图,注册蓝图

# encoding=utf-8
__author__ = "zhangyue"

from flask import Flask
from user import register
from goods import get_goods
from orders import app_orders
app = Flask(__name__)

# 注册蓝图
app.register_blueprint(app_orders)

@app.route("/")
def index():
    return "index page"


app.route("/register")(register)

app.route("/get_goods")(get_goods)

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

给蓝图设置url前缀

加上一个参数就好

# 注册蓝图
app.register_blueprint(app_orders,"/orders")

以目录形式定义蓝图

15---flask的蓝图_第1张图片
目录结构如图
现在init文件里创建一个蓝图

# encoding=utf-8
__author__ = "zhangyue"

from flask import Blueprint

# 创建了一个蓝图
app_cart = Blueprint("app_cart",__name__)

在views里导入刚刚创建的蓝图,并设置路由视图

# encoding=utf-8
__author__ = "zhangyue"

from flask import Flask
from . import app_cart

@app_cart.route("/get_cart")
def get_cart():
    return "get cart page"

在main里注册蓝图
15---flask的蓝图_第2张图片
但是现在路由还没有生效,因为main导入cart的app_cart的时候执行init文件,但是init文件中只是创建了蓝图,并没有把视图view加载进来,现在补全

# encoding=utf-8
__author__ = "zhangyue"

from flask import Blueprint

# 创建了一个蓝图
app_cart = Blueprint("app_cart",__name__)

# 在init文件被执行的时候,把视图加载进来,让蓝图与应用程序知道有视图的存在
from .views import get_cart

蓝图里模板目录的处理

15---flask的蓝图_第3张图片
如果是现在这样是找不到cart.html的.需要在创建蓝图的时候制定模板目录路径
15---flask的蓝图_第4张图片

你可能感兴趣的:(Flask)