前言

关于蓝图是什么?或为什么使用蓝图的详细介绍,官方文档讲的很详细,不再赘述。简单来说,在大型的应用中,我们不想视图函数显得杂乱无章,难以维护,将众多的视图函数按照Api的设计规则进行切割是一个好方法。

蓝图的简单使用

  • 第一步:创建蓝图
# testblue.py
from flask import Blueprint
testblue = Blueprint('blue', __name__)
@testblue.route('/index')
def index():
return 'OK'
  • 第二步:注册蓝图
# __init__.py
from testblue import testblue
app = Flask(__name__,template_folder='static/html')
app.register_blueprint(testblue, url_prefix='/testblue')
if __name__ == "__main__":
app.run()

现在通过访问http://127.0.0.1:5000/testblue/index就可以访问到蓝图定义的api。

蓝图和应用的关系

蓝图的实现方式和应用十分相似,有着和app类似的运行机制,但它又不是一个应用,可以这样说,app对象管理着多个蓝图,多个蓝图共享app的配置文件,只有在app中注册过的蓝图才会起作用,否则无效;app调用register_blueprint注册蓝图,原理是:

# 源码
def register_blueprint(self, blueprint, **options):
first_registration = False
if blueprint.name in self.blueprints:
...
else:
self.blueprints[blueprint.name] = blueprint
self._blueprint_order.append(blueprint)
first_registration = True
blueprint.register(self, options, first_registration) # 参数
blueprint:蓝图对象
url_prefix:url前缀,即统一在该蓝图的所有的url前面添加一个前缀;默认为空;
subdomain:设置蓝图应该激活的的子域,默认为空;

说明

  • 首先,app通过blueprints字典收集管理所有的蓝图,_blueprint_order属性列表存储所有的蓝图对象;

  • 蓝图对象blueprint调用register方法,会将蓝图下的所有视图函数添加到app的view_functions属性中,所有的Rule添加到APP的url_map属性中;

Blueprint对象分析

  • Blueprint的初始化
def __init__(self, name, import_name, static_folder=None,
static_url_path=None, template_folder=None,
url_prefix=None, subdomain=None, url_defaults=None,
root_path=None):
pass # 参数
name:设置蓝图的名字,这个名字是蓝图的标识,用来区分多个蓝图的不同;
import_name:指定蓝图的资源文件夹,也就是蓝图的位置,该参数是模块的名字
root_path:指定蓝图的资源文件夹的绝对路径,如果这个不是None,import_name的设置失效;
static_folder:指定静态文件的路径,相对路径是相对于root_path;
static_url_path:静态文件的url;
template_folder:模板的路径;
url_prefix:url的前缀,如果在蓝图注册的时候也设置了该参数,那会使用注册时的参数;
subdomain:蓝图激活的子域;
url_defaults:默认的路径参数和其对应的值的键值对,当其被设置后,本蓝图的所有视图函数便拥有该参数
from flask import Blueprint
testblue = Blueprint('blue', __name__, url_defaults={'name':'cai'})
@testblue.route('/index')
def index(name):
print(name) # 拥有了默认的参数name
return 'OK'
  • 重要的方法
Blueprint.add_url_rule:往app中注册视图函数和路由规则;
Blueprint.endpoint:装饰器,直接往app的view_funcs添加视图函数;
Blueprint.before_request:装饰器,装饰的方法本蓝图的每个请求调用视图函数前执行
Blueprint.before_app_request:装饰器,装饰的方法app所有请求调用视图函数前执行,但如果对应的蓝图有自己的before_request装饰方法则执行自己的
Blueprint.before_app_first_request:装饰器,装饰的方法app所有请求第一次调用视图函数前执行;
Blueprint.after_request:装饰器,装饰的方法本蓝图的每个请求调用视图函数后执行,如果对应的app有全局的after_request装饰方法则执行全局的
Blueprint.after_app_request:装饰器,装饰的方法app所有请求调用视图函数后执行
Blueprint.teardown_request:装饰器,装饰的方法本蓝图的视图函数是否有异常都会执行;
Blueprint.teardown_app_request:装饰器,装饰的方法app所有视图函数是否有异常都会执行,但如果蓝图自己定义了则执行蓝图本身的
Blueprint.app_errorhandler:装饰器,自定义app的所有的http请求的标准错误处理;
Blueprint.errorhandler:装饰器,自定义本蓝图的所有http请求的标准错误处理
Blueprint.url_value_preprocessor:装饰器,定义本蓝图所有的请求的url预处理
Blueprint.url_defaults:装饰器,在app的url_default_functions中添加本蓝图的url生成的处理函数
Blueprint.app_url_value_preprocessor:装饰器,定义app所有的请求的url预处理,如果蓝图有自己的预处理则使用蓝图本身的
Blueprint.app_url_defaults:装饰器,在app的url_default_functions中添加app所有的url生成的处理函数,在调用url_for时会被调用
Blueprint.register_error_handler:方法,手动添加蓝图的标准错误处理

参考

flask基础之蓝图的使用(七)的更多相关文章

  1. 第二篇 Flask基础篇之(闪现,蓝图,请求扩展,中间件)

    本篇主要内容: 闪现 请求扩展 中间件 蓝图 写装饰器,常用 functools模块,帮助设置函数的元信息 import functools def wrapper(func): @functools ...

  2. Flask【第2篇】:Flask基础

    Flask基础 知识点回顾 1.flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi 2.实例化Flask对象,里面是有参数的 app = Flask(__name ...

  3. python 全栈开发,Day120(路由系统, 实例化Flask的参数, 蓝图(BluePrint), before_request after_request)

    昨日内容回顾 1.Flask: from flask import Flask app = Flask(__name__) # 从源码中可以看出,Flask集成的run方法是由werkzeug中的ru ...

  4. flask基础之AppContext应用上下文和RequestContext请求上下文(六)

    前言 应用上下文和请求上下文存在的目的,官方文档讲的很清楚,可参考: http://www.pythondoc.com/flask/appcontext.html 应用上下文对象在没有请求的时候是可以 ...

  5. flask基础之请求处理核心机制(五)

    前言 总结一下flask框架的请求处理流程. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) flask基础之jijia2模板语言进阶(三) flask ...

  6. flask基础之app初始化(四)

    前言 flask的核心对象是Flask,它定义了flask框架对于http请求的整个处理逻辑.随着服务器被启动,app被创建并初始化,那么具体的过程是这样的呢? 系列文章 flask基础之安装和使用入 ...

  7. flask中的蓝图实现模块化的应用

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

  8. Flask基础总结

    Flask 基础总结 .Flask优点: 拥有强大的第三方组件小而精非常全面,不足就是更新太快 .Flask中的三剑客: HTTPRespone redierct render_template .F ...

  9. Flask 中的蓝图

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

随机推荐

  1. MT【146】一边柯西,一边舍弃

    (2018浙江省赛9题)设$x,y\in R$满足$x-6\sqrt{y}-4\sqrt{x-y}+12=0$,求$x$的范围______ 解答:$x+12=6\sqrt{y}+4\sqrt{x-y} ...

  2. 【BZOJ4774】修路(动态规划,斯坦纳树)

    [BZOJ4774]修路(动态规划,斯坦纳树) 题面 BZOJ 题解 先讲怎么求解最小斯坦纳树. 先明白什么是斯坦纳树. 斯坦纳树可以认为是最小生成树的一般情况.最小生成树是把所有给定点都要加入到联通 ...

  3. BZOJ 3110 K大数查询 | 整体二分

    BZOJ 3110 K大数查询 题面 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个 ...

  4. 针对Weblogic测试的一些小总结(转)

    1. 管理员登录页面弱密码 Weblogic的端口一般为7001,弱密码一般为weblogic/Oracle@123 or weblogic,或者根据具体情况进行猜测,公司名,人名等等,再有就可以用b ...

  5. SSM 小demo的盲点总结

    日期Date和String之间的转换: 1. 全局转换器(推荐使用) 1. 创建类实现Converter接口,实现Convert方法 public class StringToDateConvert ...

  6. MySQL 第二篇:库操作

    一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MyS ...

  7. FPGA/SOPC学习转载

    转自小時不識月http://www.cnblogs.com/yuphone/archive/2010/08/27/docs_plan.html 新网址为:http://andrewz.cn [连载计划 ...

  8. Tensorflow训练神经网络

    以下代码摘自<Tensorflow实战Google 深度学习框架>. 由于这段代码包含了激活函数去线性化,多层神经网络,指数衰减学习率,正则化防止过拟合,滑动平均稳定模型等手段,涵盖了神经 ...

  9. 左值与右值,左值引用与右值引用(C++11)

    右值引用是解决语义支持提出的 这篇文章要介绍的内容和标题一致,关于C++ 11中的这几个特性网上介绍的文章很多,看了一些之后想把几个比较关键的点总结记录一下,文章比较长.给出了很多代码示例,都是编译运 ...

  10. Jenkins+Maven+SVN

    准备环境: CentOS7 JDK1.7.9.0_79 Maven3.3.9 Jenkins2.5.0 1.配置jdk环境变量 2.安装maven(否则在创建job时没有maven选项) unzip ...