flask蓝图blueprint详解

2023-10-16 20:50
文章标签 详解 flask blueprint 蓝图

本文主要是介绍flask蓝图blueprint详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Flask 蓝图(Blueprint)使用方式解析

Flask蓝图提供了模块化管理程序路由的功能,使程序结构清晰、简单易懂。下面分析蓝图的使用方法

假如说我们要为某所学校的每个人建立一份档案,一个很自然的优化方式就是这些档案如果能分类管理,就是说假如分为老师、学生、后勤人员等类别,那么后续查找和管理这些档案就方便清晰许多。Flask的蓝图就提供了类似“分类”的功能。

下面先上一张较大型程序的组织结构图


1

可以看到在app文件夹下有两个文件夹main和auth内含有视图函数,而main和auth就是注册的两个蓝图。

1. 蓝图的创建及注册

在图1中,以main文件夹为例。在main文件夹的__init__.py文件中,可创建蓝图,代码如下:


2

从Flask中导入Blueprint类,再创建一个实例即可。Blueprint接受两个参数实例化,分别为蓝本的名字和蓝本所在的包或模块,大多数情况下第二个参数使用Python 的__name__ 变量即可。


3

在图3中,是在Flask文件夹下的__init__.py文件中注册这两个模块(请结合图1理解文件夹的组织结构)。该__init__.py文件中包含app创建函数,创建app后,即可注册已创立的蓝图。

最后一部是在main文件夹下的view文件中导入创建的蓝图,使用from . import main命令。不要忘记这一步,应为视图函数实在view文件种定义的,不导入蓝图的话,无法用蓝图定义路由。

另请注意在图2中,在main = Blueprint(‘main’, __name__) 命令下有一个from . import views, errors命令。该命令的意思是导入在views和errors整个模块。在此我们发现views模块和__init__模块之间存在相互导入。一定要保证__init__模块中,from . import views, error命令在main = Blueprint(‘main’, __name__)之后,否则会产生依赖循环导入的错误。

2. 使用蓝图创建路由

使用蓝图创建路由的示例如下图:


4

该路由的创建有两点要注意,一是@main.route修饰器,在使用蓝图之前,所有的路由均通过@app.route注册,在此可对比创建蓝图后的不同。二是url_for函数的参数,该参数是一个“端点”名称,就是和在路由中定义的视图函数的名称,此处的‘ .index ’端点名是一种简写的方式,就是表示main蓝图下的index函数。如果我们要指向‘auth’蓝图下的index函数,应该使用‘ auth.index ’ 端点名称

另请注意图4中生成的url和通过@app.route修饰器生成的url没有区别,是因为在注册main蓝图时(见图2)没有加“前缀”。回到图2,对比main蓝图和auth蓝图的注册,会发现auth在注册时多了一个url_prefix=’/auth’ ,这个就是加的前缀。假如我们通过@auth.route(‘/student’)创建了一个路由,那么我们在访问该路由时,要输入www.somehost.com/auth/student 才能行。

3. 从蓝图回到全局

创建蓝本后,会对Flask已定义的一些功能造成改变。例如在Flask中提供了一个before_request 钩子,通过该钩子,可以注册在请求之前必须先完成的函数。在创建蓝本前,当访问通过@app.route修饰器创建的所有路由时,均要先完成在钩子中注册的函数。但注册蓝本后,如果使用@main.before_request钩子,那么我们访问通过别的蓝本注册的路由时,可不用先完成在钩子中注册的函数。如果仍要保持“全局”的功能,应该使用@main.before_app_request钩子。

回到文章的起点,蓝本的使用是程序结构明晰,在后续使用中如果有其他心得,笔者会继续补充。





原文链接: https://www.jianshu.com/p/95b584e4f76e

这篇关于flask蓝图blueprint详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/220715

相关文章

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

Java SWT库详解与安装指南(最新推荐)

《JavaSWT库详解与安装指南(最新推荐)》:本文主要介绍JavaSWT库详解与安装指南,在本章中,我们介绍了如何下载、安装SWTJAR包,并详述了在Eclipse以及命令行环境中配置Java... 目录1. Java SWT类库概述2. SWT与AWT和Swing的区别2.1 历史背景与设计理念2.1.

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

SpringBoot 中 CommandLineRunner的作用示例详解

《SpringBoot中CommandLineRunner的作用示例详解》SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的... 目录1、CommandLineRunnerSpringBoot中CommandLineRunner的作用

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Java日期类详解(最新推荐)

《Java日期类详解(最新推荐)》早期版本主要使用java.util.Date、java.util.Calendar等类,Java8及以后引入了新的日期和时间API(JSR310),包含在ja... 目录旧的日期时间API新的日期时间 API(Java 8+)获取时间戳时间计算与其他日期时间类型的转换Dur