当前位置: 首页 > news >正文

(十六)Flask之蓝图

蓝图

Flask蓝图(Blueprint)是Flask框架中用于组织和管理路由、视图函数以及静态文件的一种机制。它提供了一种将应用程序拆分为更小、可重用组件的方式,使得项目结构更清晰,代码更易于维护。

使用Flask蓝图,可以将相关功能的路由和视图函数打包在一个模块中,并将其注册到主应用中。这样可以实现模块化开发,每个蓝图负责不同的功能或子应用,提高了代码的可读性和可维护性。

一、基本使用:

  1. 创建蓝图对象:使用flask.Blueprint类创建蓝图对象。需要指定蓝图的名称和所在的包或模块。

    from flask import Blueprintuser_op = Blueprint('user', __name__)
    
  2. 定义路由和视图函数:在蓝图对象上使用装饰器来定义路由和对应的视图函数。

    @user_op.route('/login', methods=['GET', 'POST'])
    def login():# 处理登录逻辑return 'Login Page'
    
  3. 注册蓝图:将蓝图对象注册到主应用中。

    from flask import Flaskapp = Flask(__name__)
    app.register_blueprint(user_op)
    

    这样,蓝图中定义的路由和视图函数就会和主应用一起生效了。

二、实战讲解:

使用蓝图的Flask项目的一般目录结构:

在这里插入图片描述

  • account.py文件:

    from flask import Blueprintac = Blueprint('ac', __name__)@ac.route('/login')
    def login():return 'Login'@ac.route('/logout')
    def logout():return 'Logout'
  • admin.py文件:

    from flask import Blueprintad = Blueprint('ad', __name__, url_prefix='/admin')@ad.route('/index')
    def index():return 'Admin-Index'
  • user.py文件:

    from flask import Blueprintus = Blueprint('us', __name__)@us.before_request
    def auth_():print('user-before_request中间件~')@us.route('/info')
    def info():return 'Info'
  • __init__.py文件:

    from flask import Flaskfrom .account import ac
    from .admin import ad
    from .user import usapp = Flask(__name__)app.register_blueprint(ac)
    app.register_blueprint(ad)
    app.register_blueprint(us)
  • manage.py文件:

    from flask_demo.views import appif __name__ == '__main__':app.run()

通过上述demo项目,可以看出蓝图的三大实用功能:

  1. 做目录结构的划分。

  2. 路由隔离:蓝图允许自定义URL前缀,从而将路由与其他蓝图或主应用程序隔离开。这样可以避免路由冲突,并为各个功能模块提供独立的URL命名空间(蓝图的命名空间还可以通过使用endpoint参数来进一步定制,它允许为蓝图中的路由和视图函数定义自定义名称)。不同蓝图之间的路由可以相互独立存在,提高了代码的灵活性和可扩展性。

    (比如:上述项目访问index路由的话就需要加上路由前缀/admin):

    在这里插入图片描述

  3. 可以给指定蓝图加只对当前蓝图生效的中间件(如:before_request等)。而不是全局的!

    在这里插入图片描述

除这三大实用功能外,蓝图还有以下不得不提到的优点:

  • 错误处理:蓝图可以定义自己的错误处理函数,并捕获特定蓝图范围内的异常。这样可以实现更细粒度的错误处理,并为不同功能模块提供特定的异常处理逻辑。
  • 静态文件和模板管理:蓝图可以包含静态文件和模板文件(上述demo项目创建了对应目录,但是我没用到),使得在多个模块中共享静态资源和模板更加方便。通过指定静态文件夹和模板文件夹,可以实现按需加载和管理静态资源,提高了项目的组织和可维护性。
  • 插件和扩展支持:蓝图可以使用Flask插件和扩展,从而为模块化应用程序提供丰富的功能和功能扩展。通过将插件和扩展与蓝图集成,可以使每个模块具有自己独立的功能和特性,同时又能与其他模块协同工作。

相关文章:

(十六)Flask之蓝图

蓝图 Flask蓝图(Blueprint)是Flask框架中用于组织和管理路由、视图函数以及静态文件的一种机制。它提供了一种将应用程序拆分为更小、可重用组件的方式,使得项目结构更清晰,代码更易于维护。 使用Flask蓝图,可以将相…...

面试问题--文件IO

文件 I/O 操作在 C 语言中的使用 在 C 语言中,文件 I/O(Input/Output)操作是处理文件的重要部分。本文将介绍一些常见的文件 I/O 操作及其使用示例。 打开和关闭文件 1.打开文件: fopen() 函数用于打开一个文件。 FILE *fpt…...

SpringBoot中实现跨域的几种常用方式

在SpringBoot中实现跨域请求可以通过以下几种方式: 1. 使用CrossOrigin注解,可以直接在Controller层的方法上使用,用来指定允许跨域请求的来源、方法和头信息。例如: CrossOrigin(origins "http://localhost:8080") …...

MeterSphere实战(一)

MeterSphere是一位朋友讲到的测试平台,说这东西是开源的,因为我是做测试的,很乐意了解一些新鲜事物。在我看来,测试就是要专注一些领域,然后要啥都会一点点,接着融会贯通起来,这样就可以万变不离…...

ESP32-Web-Server编程-在网页中插入图片

ESP32-Web-Server编程-在网页中插入图片 概述 图胜与言,在网页端显示含义清晰的图片,可以使得内容更容易理解。 需求及功能解析 本节演示在 ESP32 Web 服务器上插入若干图片。在插入图片时还可以对图片设置一个超链接,用户点击该图片时,网页将跳转到图片对应的链接网址…...

<软考>软件设计师-4知识产权与标准化(总结)

(一)知识产权概述 1 知识产权 是指公民、法人、非法人单位对自己的创造性智力成果和其他科技成果依法享有的民事权。是智力成果的创造人依法享有的权利和在生产经营活动中标记所有人依法所享有的权利的总称。包含著作权、专利权、商标权、商业秘密权、植物新品种权、集成电路布…...

唯创知音WTVxxx语音芯片在免洗烘干机中的应用:提升用户体验与产品智能化

在现今这个高科技普及的时代,人们对家电产品的需求不再仅仅满足于基本功能,而是更多的关注用户体验和产品智能化。因此,唯创知音WTVxxx语音芯片在免洗烘干机中的应用,无疑是对这一需求的完美回应。 唯创知音WTVxxx语音芯片是一款…...

golang游戏服务器 - tgf系列课程06

游戏配置 使用框架提供的游戏配置工具,只要两步,开箱即用需求描述 沿用上一节课的案例, 创建道具表,通过道具id在道具服中获取配置中道具的名称Excel 创建配置表根据项目文档中进阶教程目录下ExcelToJson的教程文档,创建指定格式的Excel文件. 脚本 生成脚本 func main() {//…...

【Canvas】记录一次从0到1绘制风场空间分布图的过程

前言 📫 大家好,我是南木元元,热衷分享有趣实用的文章,希望大家多多支持,一起进步! 🍅 个人主页:南木元元 目录 背景 前置知识 风场数据 绘制风场 准备工作 生成二维网格 获取…...

如何用gpt改写文章 (1) 神码ai

大家好,今天来聊聊如何用gpt改写文章 (1),希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 如何用GPT改写文章 一、引言 随着人工智能技术的飞速发展,自然语言处理领域取得了重大突…...

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring依赖注入数值问题

第一章 Spring依赖注入数值问题 1.1 字面量数值 数据类型&#xff1a;基本数据类型及包装类、String语法&#xff1a;value属性或value标签 1.2 CDATA区 语法&#xff1a;<![CDATA[]]>作用&#xff1a;在xml中定义特殊字符时&#xff0c;使用CDATA区 1.3 外部已声明…...

egen3 rowwise().maxCoeff()的使用

1、安装eigen3 2、引用头文件 3、代码测试 MatrixXf aaa(2, 4);aaa << 1, 2, 3, 4, 5, 6, 7, 8; Vector2f diff(10, 20);aaa.colwise() diff;std::cout << "new_aaa : " << aaa << endl; 全部代码&#xff1a; int main() {MatrixXf …...

关于Pytorch和Numpy中的稀疏矩阵sparse的知识点

Pytorch和Numpy中的稀疏矩阵sparse 0 稀疏矩阵类别0.1 coo_matrix0.2 dok_matrix0.3 csr_matrix0.4 csc_matrix0.5 bsr_matrix0.6 bsc_matrix0.7 lil_matrix0.8 dia_matrix 1 pytorch中的稀疏矩阵1.1 to_sparse()1.2 to_sparse_csr()1.3 sparse_coo_tensor()1.4 sparse_csr_ten…...

2024年AI云计算专题研究报告:智算带来的变化

今天分享的人工智能系列深度研究报告&#xff1a;《2024年AI云计算专题研究报告&#xff1a;智算带来的变化》。 &#xff08;报告出品方&#xff1a;华泰证券&#xff09; 报告共计&#xff1a;32页 Al 云计算 2024:关注智算带来的新变化 通过对海内外主要云厂商及其产业链…...

孩子还是有一颗网安梦——Bandit通关教程:Level 5 → Level 6

&#x1f575;️‍♂️ 专栏《解密游戏-Bandit》 &#x1f310; 游戏官网&#xff1a; Bandit游戏 &#x1f3ae; 游戏简介&#xff1a; Bandit游戏专为网络安全初学者设计&#xff0c;通过一系列级别挑战玩家&#xff0c;从Level0开始&#xff0c;逐步学习基础命令行和安全概念…...

vue2-elementUI部分组件样式修改

el-radio样式&#xff1a; /deep/ .el-radio__input .el-radio__inner {width: 20px;height: 20px;position: relative;cursor: pointer;-webkit-appearance: none;-moz-appearance: none;appearance: none;border: 1px solid #999;border-radius: 0;outline: none;transition…...

fijkplayer flutter 直播流播放

fijkplayer flutter 直播流播放 fijkplayer 是 ijkplayer 的 Flutter 封装&#xff0c; 是一款支持 android 和 iOS 的 Flutter 媒体播放器插件&#xff0c; 由 ijkplayer 底层驱动。 通过纹理&#xff08;Texture&#xff09;接入播放器视频渲染到 Flutter 中。 前言 目前使用…...

Javascript的基本语法(规范)

JS的基本语法规范 1.JS中严格区分大小写 2.JS中每一个指令被称为一个语句&#xff0c;每一个语句都应该以分号结尾 - 在JS中有自动的添加分号的机制&#xff0c;如果不写分号浏览器会自动为你添加 - 有些情况下&#xff0c;浏览器可能会给你加错了&#xff08;几率低&#…...

vue chrome debugger 无效

昨天晚上debbger可以正常运行的&#xff0c;但是早上起来突然间所有的debugger都不会被命中&#xff0c;重装了vscode,也清了浏览器缓存&#xff0c;可是这个bitch还是不行&#xff01;整整折腾了一早上&#xff0c;就是无法解决&#xff0c;没办法只能找找资料 &#xff0c;搜…...

JRT实现Cache的驱动

我只给PostGreSql和iris写了连接驱动&#xff0c;永国的库是Cache&#xff0c;他就自己写了个驱动&#xff0c;驱动其实就是把数据库差异接口抽取了出来&#xff0c;然后只要配对应数据库驱动就能连响应的数据库了。 package JRT.Dal.Base;import JRT.Core.MultiPlatform.JRTC…...

ESP32网络开发实例-Web串口(WebSerial)

Web串口(WebSerial) 文章目录 Web串口(WebSerial)1、软件准备2、硬件准备3、代码实现4、接收数据在本文中,我们将介绍如何实现的基于 Web 的 ESP32 串行监视器。 1、软件准备 Arduino IDE在前面的文章中,如何搭建ESP32的Arduino IDE开环境,主参考: ESP32-Arduino-开发实…...

P2 Qt Creator创建第一个Qt程序

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《LLinux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f33a;本篇简介 &#xff1a;这一章我们学…...

加班、效率和价值

效率不等于单位时间单位人干的活&#xff0c;而是等于单位时间单位人产出的价值&#xff0c;衡量工作量的难度很大&#xff0c;而如何选择工作重点&#xff0c;挖掘工作价值难度更大。 加班的不可持续在于两点&#xff0c;第一点是对身体和精神的损害&#xff0c;降低内在动力…...

【QT 5 调试软件+(Linux下验证>>>>串口相关初试串口)+Windows下qt代码在Linux下运行+参考win下历程+基础样例】

【QT 5 调试软件Linux下验证>>>>串口相关初试串口参考win下历程基础样例】 1、前言2、实验环境3、先行了解4、自我总结-win下工程切到Linux下1、平台无关的代码&#xff1a;2、依赖的库&#xff1a;3、文件路径和换行符&#xff1a;4、编译器差异&#xff1a;5、构…...

地址栏不安全提示

在使用浏览器时访问网站的时候&#xff0c;我们可能会遇到地址栏提示不安全的情况。这种情况通常都是是由于未安装有效SSL证书或者网站SSL证书过期等原因导致的。本文将介绍如何处理地址栏提示不安全的问题&#xff0c;以确保我们的上网安全。 1&#xff0c;缺少SSL证书&#x…...

glib编译与实战

文章目录 下载编译修正实战参考 下载 https://ftp.acc.umu.se/pub/GNOME/sources/glib/ 编译 cd glib mkdir buildmeson --prefix/home/glib build ninja -C build ninja -C build install修正 meson.build:1:0: ERROR: Meson version is 0.53.2 but project requires >…...

PHP基础(4)

目录 一、PHP 创建用户定义函数 二、数组 数组的排序函数 一、PHP 创建用户定义函数 用户定义的函数声明以单词 "function" 开头&#xff1a; PHP自定义函数是指用户自行定义的函数&#xff0c;以满足自己的编程需求。在PHP中&#xff0c;可以通过以下语法来定义一…...

软件安全设计

目录 一&#xff0c;STRIDE 威胁建模 1&#xff0c;STRIDE 2&#xff0c;总体流程&#xff08;关键步骤&#xff09; 3&#xff0c;数据流图的4类元素 二&#xff0c;安全设计原则 三&#xff0c;安全属性 一&#xff0c;STRIDE 威胁建模 1&#xff0c;STRIDE STRIDE 是…...

Mysql、Oracle安全项检查表及操作脚本

软件开发全资料获取&#xff1a;点我获取 Mysql检查表 Oracle检查表...

单片双向马达驱动芯片D6208的芯片描述

D6208 是一块单片双向马达驱动电路&#xff0c;它使用TTL电平的逻辑信号就能控制卡式录音机和其它电子设备中的双向马达。该电路由一个逻辑部分和一个功率输出部分组成。逻辑部分控制马达正、反转向及制动&#xff0c;功率输出部分根据逻辑控制能提供100mA&#xff08;典型值&a…...