蓝图(blueprint)的理解和用法
- 作用:
blueprint把不同功能的module分开。可以让应用模块化,针对大型应用。
蓝图的基本概念:在蓝图被注册到应用之后,所要执行的操作的集合。当分配请求时, Flask 会把蓝图和视图函数关联起来,并生成两个端点之前的 URL 。
比如只有一个run.py。有些功能需要多人分开来写,有些功能会有交错的可能,代码位置也不会在一起,这样可以用蓝图来开关一些模块(功能)和宏定义类似,但不是可插拔的应用而是一套可以注册在应用中的操作,并且可以注册多次。或者简单滴需要降低耦合,提高模块复用率。比如开发环境和应用环境的不同,可以用蓝图来切换环境。
蓝图的缺点是一旦应用被创建后,只有销毁整个应用对象才能注销蓝图。
- Flask web的应用说明:
在单脚本程序中,程序实例存在于全局作用域中,路由可以直接使用app.route修饰器定义。但现在程序在运行时创建,只有调用create_app()之后才能使用app.route修饰器,这时定义路就太晚了。蓝本和程序类似,也可以定义路由。不同的是,在蓝本中定义的路由处于休眠状态,直到蓝本注册到程序上后,路由才真正成为程序的一部分。使用位于全局作用域中的蓝本时,定义路由的方法几乎和单脚本程序一样。为了获得最大的灵活性,程序包中创建了一个子包,用于保存蓝本。
- Flask web里蓝图示例
app/main/init.py:创建蓝图
from flask import Blueprint
main = Blueprint('main', __name__)#两个必要参数'main'蓝图名字;'__name__'蓝图所在的模块或者包,一般为'__name__'变量
#实例化一个Blueprint 类对象创建蓝图
from . import views, errors
app/init.py:注册蓝本
def create_app(config_name):
# ...
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app
app/main/errors.py:蓝本中的错误处理程序
from flask import render_template
from . import main
@main.app_errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
@main.app_errorhandler(500)
def internal_server_error(e):
return render_template('500.html'), 500
app/main/views.py:蓝本中定义的程序路由
from datetime import datetime
from flask import render_template, session, redirect, url_for
from . import main
from .forms import NameForm
from .. import db
from ..models import User
@main.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
# ...
return redirect(url_for('.index'))
return render_template('index.html',
form=form, name=session.get('name'),
known=session.get('known', False),
current_time=datetime.utcnow())
- 用法:
- 1.
如果使用errorhandler 修饰器,那么只有蓝本中的错误才能触发处理程序。即修饰器由蓝本提供。要想注册程序全局的错误处理程序,必须使用app_errorhandler。
- 2.
创建 URL用法:
Flask 会为蓝本中的全部端点加上一个命名空间,这样就可以在不
同的蓝本中使用相同的端点名定义视图函数,而不会产生冲突。(跨蓝本)
在单脚本程序中:index() 视图函数的URL 可使用
url_for(‘index’)
在蓝图中:index() 视图函数的URL 可使用
url_for(‘main.index’)
另外,如果在一个蓝图的视图函数或者被渲染的模板中需要链接同一个蓝图中的其他端点,那么使用相对重定向,只使用一个点使用为前缀。简写形式(命名空间是当前请求所在的蓝本):
url_for(‘.index’)
附上官方文档:使用蓝图的模块化应用
蓝图(blueprint)的理解和用法相关推荐
- 蓝图(Blueprint)理解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.蓝图Blueprint是什么? 二.使用步骤 1.引入库 2.读入数据 总结 前言 提示:这里可以添加本文要记录的 ...
- python模块之HTMLParser之穆雪峰的案例(理解其用法原理)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之HTMLParser之穆雪峰的案例(理解其用法原理) #http://www.cnblog ...
- string_view理解与用法(二)
以前写了<string_View理解与用法(一)>和<详解C++17下的string_view>,请参考. 本篇文章从string_view引入的背景出发,依次介绍了其相关的知 ...
- Promise async/await的理解和用法
Promise && async/await的理解和用法 为什么需要promise(承诺)这个东西 在之前我们处理异步函数都是用回调这个方法,回调嵌套的时候会发现 阅读性 和 调试 的 ...
- Flask 中的蓝图 Blueprint
Flask 中的蓝图 Blueprint 在实际的项目开发中,需要实现的功能是很多的,通常来说一个功能至少需要一个视图函数,代码量比较大. 如果将所有视图函数都写在同一个 py 文件中,功能没有问题, ...
- php yield 个人小解_PHP5.5新特性之yield理解与用法实例分析
本文实例讲述了PHP5.5新特性之yield理解与用法.分享给大家供大家参考,具体如下: yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实 ...
- 【Python 实战基础】Flask 蓝图 Blueprint 怎么用以及怎么集成 Bootstrap
目录 一.简介 二.主要知识点 三.菜鸟实战 1.创建蓝图 2.注册蓝图 3.蓝图运行结果 4.下载和引入 Bootstrap 5.代码目录 6.Bootstrap 运行结果 一.简介 Flask ...
- Flask 蓝图 Blueprint
为什么需要蓝图? 我们在使用Flask框架,是从写单个文件,执行hello world开始的.我们在这单个文件中可以定义路由.视图函数.定义模型等等.但这显然存在一个问题:随着业务代码的增加,将所有代 ...
- 对于EnterCriticalSection和LeaveCriticalSection的理解和用法
对于EnterCriticalSection和LeaveCriticalSection的理解和用法 2015年08月26日 11:58:08 阅读数:4966 线程锁的概念函数EnterC ...
最新文章
- Python 学习之中的一个:在Mac OS X下基于Sublime Text搭建开发平台包括numpy,scipy
- websphere 内存溢出处理
- 如何隐藏你写的ABAP代码
- vue事件修饰符:通过@click.self的self属性来阻止内层向外层冒泡
- win10开机慢怎么解决_细说Win10启动慢怎么办
- 基于struts2+hibernate+spring(ssh2)的登录验证码的实现
- TypeScript 里的 module 概念
- Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(七)...
- 容器编排技术 -- 使用kubectl实现应用滚动更新
- [Ext JS 4] Extjs 图表 Legend(图例)的分行与分列显示
- 问题及解决 —— 浏览器问题
- Qt —— 完美制作win系统扬声器、麦克风控制程序
- 计算机专业对未来职业的理想追求,IT行业个人职业生涯规划
- 五子棋项目结束总结_五子棋比赛活动总结
- Unity3d+C#斗地主学习探究1
- 生信必会格式:Fasta Fastq 简介及转换
- c语言中循环体表达式,C语言的循环语句
- 3D游戏建模线上和线下学习的区别
- 华为云发布代码检查服务;微软向其美国雇员提供“无限制”休假时间;付费版 ChatGPT|极客头条
- 基层管理之正负向激励