当前位置: 首页 > 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插件和扩展,从而为模块化应用程序提供丰富的功能和功能扩展。通过将插件和扩展与蓝图集成,可以使每个模块具有自己独立的功能和特性,同时又能与其他模块协同工作。

相关文章:

  • 探索HarmonyOS_开发软件安装
  • 第四章 逻辑运算和判断选择(三)
  • Hazelcast分布式内存网格(IMDG)基本使用,使用Hazelcast做分布式内存缓存
  • 【刷题篇】动态规划(七)
  • vue-打包后的dist文件如何在本地测试
  • 选择法排序
  • 什么是Scss
  • mysql,根据学生成绩计算各个分数段学生数量,以及最高分最低分平均分
  • JVM 性能调优
  • Airtest使用的图像识别算法识别比较慢解决办法,改变算法的运算顺序或者指定一种算法,提高Airtest图像识别效率
  • SpringBoot集成WebSocket
  • 软件项目管理---胡乱复习版
  • 虚幻学习笔记10—C++函数与蓝图的通信
  • C++STL的vector模拟实现
  • 现代皮质沙发模型材质编辑
  • 《深入 React 技术栈》
  • 5、React组件事件详解
  • CSS实用技巧
  • django开发-定时任务的使用
  • gops —— Go 程序诊断分析工具
  • JS变量作用域
  • js如何打印object对象
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Rancher如何对接Ceph-RBD块存储
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 十年未变!安全,谁之责?(下)
  • 详解NodeJs流之一
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 自定义函数
  • MPAndroidChart 教程:Y轴 YAxis
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 如何在招聘中考核.NET架构师
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • !!Dom4j 学习笔记
  • #if和#ifdef区别
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (06)Hive——正则表达式
  • (1)Nginx简介和安装教程
  • (NSDate) 时间 (time )比较
  • (ZT)一个美国文科博士的YardLife
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (四)汇编语言——简单程序
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Micro Framework 4.2 beta 源码探析
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET 中的轻量级线程安全
  • .net和php怎么连接,php和apache之间如何连接
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname