(十六)Flask之蓝图

蓝图

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

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

一、基本使用:

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

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

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

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

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

二、实战讲解:

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

在这里插入图片描述

  • account.py文件:

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

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

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

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

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

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

  1. 做目录结构的划分。

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

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

    在这里插入图片描述

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

    在这里插入图片描述

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/239029.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql中NULL值

mysql中NULL值表示“没有值”,它跟空字符串""是不同的 例如,执行下面两个插入记录的语句: insert into test_table (description) values (null); insert into test_table (description) values ();执行以后,查看表的…

VBA_NZ系列工具NZ10:VBA压缩与解压工具

我的教程一共九套及VBA汉英手册一部,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到数据库,到字典,到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑,这么多知识点该如何组织…

外贸开发信标题如何写?推荐的邮件主题行?

提高打开率的外贸开发信标题模板?怎么写好邮件主题? 一封引人注目的外贸开发信可以帮助您吸引潜在客户的注意,打开贸易大门。然而,写一个吸引人的外贸开发信并不容易。蜂邮将探讨如何撰写令人印象深刻的外贸开发信标题&#xff0…

java系列-LinkedHashMap

1.插入新节点时&#xff0c;会将该节点加到链表尾部 public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{/*** The head (eldest) of the doubly linked list.*/transient LinkedHashMapEntry<K,V> head;/*** The tail (young…

第三届iEnglish全国ETP大赛16强落位 诠释教育游戏价值

10日,与北方骤降的温度形成鲜明对比,以“玩转英语,用iEnglish”为主题的国内首个教育游戏活动第三届iEnglish全国ETP(English Through Pictures)大赛总决赛小组赛热火朝天的进行。随着“云帆沧海队”搭上末班车,本届活动16强全部产生,接下来的三个周末他们将向年度总冠军发起最…

vscode 远程连接内网服务器和通过跳板机远程连接外网服务器

1.打开vscode congfig文件&#xff0c;输入相应信息如下图 若本地没有id_rsa文件&#xff0c;可打开cmd进入.ssh目录下输入命令&#xff1a;ssh-keygen&#xff0c;创建该文件&#xff0c;会提示输入该文件保存地址以及设置秘钥密码&#xff08;最好不要设置密码&#xff0c;不…

(2023,大视觉模型 LVM,视觉句子,自回归)序列建模支持大型视觉模型的可扩展学习

Sequential Modeling Enables Scalable Learning for Large Vision Models 公Z号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 3. 数据 4. 方法 4.1 图像…

如何管理大型网站的抓取预算

优化您的网站&#xff0c;以便 Google 更快地找到您的内容并将您的内容编入索引&#xff0c;这可以帮助您的网站获得更好的知名度和流量。 互联网是一个不断发展的虚拟世界&#xff0c;拥有超过 1 亿个网站。 你认为谷歌可以抓取世界上的每一个网站吗&#xff1f; 即使拥有谷…

优化汽车产业用户营运:精细化策略

近年来随着互联网时代新技术浪潮的冲击&#xff0c;商业社会中各种原生边界不断被打破&#xff0c;新的消费需求、新的商业模式、新的竞争挑战层出不穷。各行业往往面临重重困境与迷思&#xff0c;学会如何精细化运营用户显得尤为重要。立即阅读阅文&#xff0c;详细了解其中用…

系列十、SpringBoot + MyBatis + Redis实现分布式缓存(基于注解方式)

一、概述 上篇文章 系列九、SpringBoot MyBatis Redis实现分布式缓存 介绍了基于xml方式实现分布式缓存的效果&#xff0c;当前大家使用的技术栈基本是springboot各种框架的组合&#xff0c;而springboot显著的一个特点就是去xml配置&#xff0c;那么在无xml配置的情形下&…

LeetCode(55)环形链表【链表】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 环形链表 1.题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评…

【EDA工具-VCS和Verdi的使用_2023.12.9】

芯片开发所需工具环境 Linux/Unix 编辑器Vim/Gvim EDA工具 Makefile 脚本语言Perl/Python 版本控制SVN/GIT 脚本语言Makefile 形式&#xff08;由一系列的规则组成&#xff09; 规则的目标&#xff1a;规则的依赖&#xff08;可有可无&#xff09; 规则的命令行&#xff08…

CompletableFuture使用小结

为什么需要CompletableFuture CompletableFuture继承了CompletionStage接口和Future接口&#xff0c;在原有Future的基础上增加了异步回调、流式处理以及任务组合&#xff0c;成为JDK8多任务协同场景下一个有效利器。 CompletableFuture使用示例 提交有返回值的异步任务 通…

【HTML】基于jsQR实现的HTML单页面扫码功能

前言 最近做了一个扫码签到的功能涉及到获取浏览器摄像头并扫码识别的功能。 选择jsQR的原因&#xff1a; html5-qrcode&#xff1a;使用简单&#xff0c;识别率低&#xff0c;二维码小不可解析 zxing/library&#xff1a; 识别率优于html5-qrcode&#xff0c;部分安卓模糊…

Linux系统编程:高级IO总结

非阻塞IO基本概念 高级IO核心就一个概念&#xff1a;非阻塞IO。 与该概念相对的&#xff0c;就是我们之前学习过的阻塞IO。 非阻塞IO&#xff08;Non-blocking I/O&#xff09;是一种IO模型&#xff0c;用于实现异步IO操作&#xff0c;使应用程序能够在等待IO操作完成的同时…

Ubuntu部署EMQX开源版MQTT服务器-Orange Pi部署-服务器部署

一、前言 作为全球最具扩展性的 MQTT 消息服务器&#xff0c;EMQX 提供了高效可靠海量物联网设备连接&#xff0c;能够高性能实时移动与处理消息和事件流数据&#xff0c;本文将介绍如何在Ubuntu 22.04上部署MQTT服务器。我们本次选择开源版&#xff0c;使用离线安装方式部署。…

d2l绘图不显示的问题

之前试了各种方法都不行 在pycharm中还是不行&#xff0c;但是在anaconda中的命令行是可以的 anaconda prompt conda activaye py39 #进入f盘 F: #运行文件 python F:\python_code\softmax.py

Linux Ubuntu 手动搭建webDav

1、安装 因为需要跟 zotero 进行交互&#xff0c;因此需要在服务器搭建一个webDav 以下是搭建步骤&#xff1a; sudo apt-get update sudo apt-get install apache2 Ubuntu 安装apache2来实现 不同于Centos 安装好了之后&#xff0c;运行 a2enmod dav_fs a2enmod dav 激…

Linux shell编程学习笔记34:eval 命令

0 前言 在JavaScript语言中&#xff0c;有一个很特别的函数eval&#xff0c;eval函数可以将字符串当做 JavaScript 代码执行&#xff0c;返回表达式或值。 在Linux Shell 中也提供了内建命令eval&#xff0c;它是否具有JavaScript语言中eval函数的功能呢&#xff1f; 1 eval命…

【flink番外篇】3、fflink的source(内置、mysql、kafka、redis、clickhouse)介绍及示例(2)- 自定义、mysql

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的…