zoukankan      html  css  js  c++  java
  • Flask_蓝图Blueprint(十四)

    什么是蓝图?

    蓝图:用于实现单个应用的视图、模板、静态文件的集合。

    蓝图就是模块化处理的类。

    简单来说,蓝图就是一个存储操作路由映射方法的容器,主要用来实现客户端请求和URL相互关联的功能。 在Flask中,使用蓝图可以帮助我们实现模块化应用的功能。

    为什么学习蓝图?

    我们学习Flask框架,是从写单个文件,执行hello world开始的。我们在这单个文件中可以定义路由、视图函数、定义模型等等。但这显然存在一个问题:随着业务代码的增加,将所有代码都放在单个程序文件中,是非常不合适的。这不仅会让代码阅读变得困难,而且会给后期维护带来麻烦。

    一个程序执行文件中,功能代码过多,就得让代码模块化。依据不同的功能,划分成不同的分类,降低各功能模块之间的耦合度。

    蓝图的运行机制

    蓝图是保存了一组将来可以在应用对象上执行的操作。注册路由就是一种操作,当在程序实例上调用route装饰器注册路由时,这个操作将修改对象的url_map路由映射列表。当我们在蓝图对象上调用route装饰器注册路由时,它只是在内部的一个延迟操作记录列表defered_functions中添加了一个项。当执行应用对象的 register_blueprint() 方法时,应用对象从蓝图对象的 defered_functions 列表中取出每一项,即调用应用对象的 add_url_rule() 方法,这将会修改程序实例的路由映射列表。

    蓝图的使用

    1、创建蓝图实例对象

    from flask import Blueprint
    
    # 1、在模块目录下的__init__.py文件中,创建蓝图
    # blue_print 为定义的蓝图实例
    # 第一个参数为蓝图的名称
    # 第二个参数为蓝图所在的模块
    # blue_print = Blueprint("blue", __name__)
    
    # 可以使用app定义模板的方式来定义蓝图的模板目录/静态文件目录
    # 当使用了蓝图模板后,如果在app定义的模板目录找不到模板后,会再在蓝图模板目录进行查找
    blue_print = Blueprint("blue", __name__, template_folder="templates")

    2、注册蓝图路由。

    # 2、在模块目录下的views.py中使用蓝图实例定义视图的路由
    from . import blue_print
    from flask import render_template
    
    @blue_print.route("/index")
    def index():
        return render_template("blueprint_index.html")

    3、在程序实例中注册该蓝图

    # 3、在主程序模块使用如下代码完成蓝图注册
    # url_prefix定义蓝图路由的前缀,可缺省。
    app.register_blueprint(blue_print, url_prefix="/blue")

    4、将路由添加到MAP对象中

    # 4、在模块目录下的__init__.py文件中,将路由添加到Map中
    from .views import index

    目录结构如下

    访问蓝图定义的路由

  • 相关阅读:
    emacs 集成astyle
    git reflog
    rpm 打包的时候 不进行strip
    gmock
    如何对正在运行的进程,进行heap profile
    linux性能压测工具
    默认宏定义
    gdb fabs错误输出
    基于Clang的缓存型C++编译器Zapcc
    grep 多行 正则匹配
  • 原文地址:https://www.cnblogs.com/testlearn/p/14138552.html
Copyright © 2011-2022 走看看