Blueprint

    蓝图的基本设想是当它们注册到应用上时,它们记录将会被执行的操作。 当分派请求和生成从一个端点到另一个的 URL 时,Flask 会关联蓝图中的视图函数。

    简单来说,Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就 可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求。

一.蓝图的简介。

  Flask 用 蓝图(blueprints) 的概念来在一个应用中或跨应用制作应用组件和支持通用的模式。蓝图很好地简化了大型应用工作的方式,并提供给 Flask 扩展在应用上注册操作的核心方法。一个 Blueprint 对象与 Flask 应用对象的工作方式很像,但它确实不是一个应用,而是一个描述如何构建或扩展应用的 蓝图 。

二.蓝图的使用场景。

  ①把一个应用分解为一个蓝图的集合。适合大型应用,一个项目可以实例化一个应用对象,初始化几个扩展,并注册一集合的蓝图。

  ②以 URL 前缀和/或子域名,在应用上注册一个蓝图。 URL 前缀/子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数(默认情况下)。

  ③在一个应用中用不同的 URL 规则多次注册一个蓝图。

  ④一个蓝图不一定要实现应用或者视图函数,还可通过蓝图提供模板过滤器、静态文件、模板和其它功能。

  注:蓝图缺点,不能在应用创建后撤销注册一个蓝图而不销毁整个应用对象。

三.蓝图实现模块化。

    蓝图/Blueprint对象用起来和一个应用/Flask对象差不多,最大的区别在于一个 蓝图对象没有办法独立运 行,必须将它注册到一个应用对象上才能生效。

    使用蓝图可以分为三个步骤

      1,创建一个蓝图对象

      admin=Blueprint('admin',__name__)

      2,在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册模版过滤器

      @admin.route('/')

      def admin_home():

        return 'admin_home'

      3,在应用对象上注册这个蓝图对象

      app.register_blueprint(admin,url\_prefix='/admin')

      当这个应用启动后,通过/admin/可以访问到蓝图中定义的视图函数


四.运行机制。

   ①蓝图是保存了一组将来可以在应用对象上执行的操作,注册路由就是一种操作 

      ②当在应用对象上调用 route 装饰器注册路由时,这个操作将修改对象的url_map路由表 然而,蓝图对象根本没有路由表,当我们在蓝图对象上调用route装饰器注册路由时,它只是在内部 的一个延迟操作记录列表defered_functions中添加了一个项

       ③ 当执行应用对象的 register_blueprint() 方法时,应用对象将从蓝图对象的 defered_functions 列表中 取出每一项,并以自身作为参数执行该匿名函数,即调用应用对象的 add_url_rule() 方法,这将真 正的修改应用对象的路由表

五.蓝图的url前缀。

   ①当我们在应用对象上注册一个蓝图时,可以指定一个url_prefix关键字参数(这个参数默认是/)

   ②在应用最终的路由表 url_map中,在蓝图上注册的路由URL自动被加上了这个前缀,这个可以保证 在多个蓝图中使用相同的URL规则而不会最终引起冲突,只要在注册蓝图时将不同的蓝图挂接到 不同的自路径即可

    例如:

         #创建蓝图对象
      passport_blu = Blueprint("passport",__name__,url_prefix="/passport")#之后在使用passport_blu这个路由的url前面都会加上/passport这个前缀

六.注册静态路由。

    和应用对象不同,蓝图对象创建时不会默认注册静态目录的路由。需要我们在 创建时指定 static_folder 参数。

    下面的示例将蓝图所在目录下的static_admin目录设置为静态目录

    admin = Blueprint("admin",__name__,static_folder='static_admin')

    app.register_blueprint(admin,url_prefix='/admin')

    现在就可以使用/admin/static_admin/ 访问static_admin目录下的静态文件了 定制静态目录URL规则 :可 以在创建蓝图对象时使用 static_url_path 来改变静态目录的路由。下面的示例将为 static_admin 文件夹 的路由设置为 /lib

    admin = Blueprint("admin",__name__,static_folder='static_admin',static_url_path='/l ib')

    app.register_blueprint(admin,url_prefix='/admin')


七.设置模版目录

    蓝图对象默认的模板目录为系统的模版目录,可以在创建蓝图对象时使用 template_folder 关键字参数 设置模板目录

    admin = Blueprint('admin',__name__,template_folder='my_templates')

    注:如果在 templates 中存在和 my_templates 同名文件,则系统会优先使用 templates 中的文件

  

          

    

    

    

  

  

flask中的蓝图实现模块化的应用的更多相关文章

  1. flask中的蓝图与红图

    内容: 1.flask中的蓝图 2.flask子域名实现 3.flask中的红图 1.flask中的蓝图 一个大型项目中视图比较多,如果仅仅是写在app.py中不方便管理,蓝图就可以做到分功能分目录结 ...

  2. 第九篇 Flask 中的蓝图(BluePrint)

    第九篇 Flask 中的蓝图(BluePrint)   蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开怎么理解呢? ...

  3. Flask最强攻略 - 跟DragonFire学Flask - 第九篇 Flask 中的蓝图(BluePrint)

    蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开怎么理解呢? 比如说,你有一个客户管理系统,最开始的时候,只有一个查看 ...

  4. Flask 中的蓝图(BluePrint)

    蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开 怎么理解呢? 比如说,你有一个客户管理系统,最开始的时候,只有一个查 ...

  5. Flask中的蓝图(BluePrint)、

    蓝图 1.初识Flask蓝图(BluePrint) 创建一个项目然后将目录结构做成: user.py中的内容 from flask import Blueprint, render_template ...

  6. 9,Flask 中的蓝图(BluePrint)

    蓝图,听起来就是一个很宏伟的东西,在Flask中的蓝图 blueprint 也是非常宏伟的,它的作用就是将 功能 与 主服务 分开. 比如说,你有一个客户管理系统,最开始的时候,只有一个查看客户列表的 ...

  7. flask中的蓝图(BluePrint)

    蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开怎么理解呢? 比如说,你有一个客户管理系统,最开始的时候,只有一个查看 ...

  8. 第八篇 Flask中的蓝图

    随着业务代码的增加,将所有代码都放在单个程序文件中,是非常不合适的.这不仅会让代码阅读变得困难,而且会给后期维护带来麻烦.如下示例:我们在一个文件中写入多个路由,这会使代码维护变得困难. 如图所示,如 ...

  9. Flask 中的蓝图

    相当与django中的App 基础模板 1.初识Flask蓝图(blueprint) 创建一个项目然后将目录结构做成: s_view.py 文件中的内容   from flask import Blu ...

随机推荐

  1. 运行第一个MapReduce程序,WordCount

    1.安装Eclipse 安装后如果无法启动重新配置Java路径(如果之前配置了Java) 2.下载安装eclipse的hadoop插件 注意版本对应,放到/uer/lib/eclipse/plugin ...

  2. linux 下通过过 hbase 的Java api 操作hbase

    hbase版本:0.98.5 hadoop版本:1.2.1 使用自带的zk 本文的内容是在集群中创建java项目调用api来操作hbase,主要涉及对hbase的创建表格,删除表格,插入数据,删除数据 ...

  3. 乘风破浪:LeetCode真题_020_Valid Parentheses

    乘风破浪:LeetCode真题_020_Valid Parentheses 一.前言 下面开始堆栈方面的问题了,堆栈的操作基本上有压栈,出栈,判断栈空等等,虽然很简单,但是非常有意义. 二.Valid ...

  4. 转自csdn:计算机启动过程

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信 息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中 包含了CPU的相关信息.设备启动顺序信息 ...

  5. 35、XpathNavigator Xpath导航器 System.Xml.XPath;

    XPathNavigator类包含移动和选择XML所需元素的所有方法. 一.创建: a.如果是从XPathDocument中创建,则是只读的,只能浏览数据:  b.如果是从XmlDocument中创建 ...

  6. kafka概要设计

    Kafka核心功能 即:高性能的消息发送与高性能的消息消费 下载安装包后即可启动Kafka服务器,但是此前需要首先启动Zookeeper服务器,Zookeeper是为Kafka提供协调服务的工具,Ka ...

  7. 12、Node.js 路由

    这里实现的好像就是把路由和服务器相结合起来.具体需要引入 url 模块和 http 模块为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码需要 ...

  8. java aopalliance-1.0.jar这个包是做什么用的?

    这个包是AOP联盟的API包,里面包含了针对面向切面的接口.通常Spring等其它具备动态织入功能的框架依赖此包.

  9. BZOJ1089:[SCOI2003]严格n元树(DP,高精度)

    Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...

  10. 1968. [AHOI2005]约数研究【数论】

    Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input ...