首页 > 其他分享 >Flask 中的蓝图与红图

Flask 中的蓝图与红图

时间:2023-09-26 23:37:10浏览次数:36  
标签:__ get Flask app 蓝图 book user 红图

1. 蓝图

1.1. 概述

在 Flask 中,蓝图(Blueprint)是一种组织和管理路由、视图函数和静态文件的方式。它可以将一个应用分成多个模块,每个模块负责处理特定的路由和视图函数。

  1. 模块化
    蓝图可以将一个大型应用拆分成多个小模块,每个模块负责处理特定的功能或业务逻辑。这样可以提高代码的可维护性和可扩展性。
  2. 路由管理
    蓝图可以定义自己的路由,包括 URL 规则和对应的处理函数。这样可以将路由的定义分散到不同的蓝图中,使代码更加清晰和易于管理。
  3. 视图函数组织
    蓝图可以定义自己的视图函数,这些函数只处理蓝图范围内的请求。这样可以将相同功能的视图函数组织到同一个蓝图中,方便代码的组织和复用。
  4. 静态文件管理
    蓝图可以定义自己的静态文件目录,包括 CSS、JavaScript、图片等。这样可以将静态文件与视图函数关联起来,方便统一管理和加载。
  5. 错误处理
    蓝图可以定义自己的错误处理函数,用于处理特定蓝图范围内的错误。这样可以对不同模块的错误进行个性化处理,提高用户体验。

image

1.2. 蓝图的使用

项目整体的目录结构图

# 项目整体的目录结构图

│
├─flask_server
│  ├─ app.py
│  ├─ book.py
│  └─ user.py

book.py 文件中

from flask import Blueprint

book = Blueprint('book', __name__)

@book.route("/get_book")
def get_book():
    return 'get book'

user.py 文件中

from flask import Blueprint

user = Blueprint('user', __name__)

@user.route("/get_user")
def get_user():
    return 'get user'

app.py 文件中

from flask import Flask


def register_blueprints(app):
    from book import book
    app.register_blueprint(book)
    from user import user
    app.register_blueprint(user)


app = Flask(__name__)
# 调用注册蓝图的函数
register_blueprints(app)


if __name__ == '__main__':
    app.run(debug=True)

2. 创建自己的 Redprint(即自定义 红图)

2.1. 概述

红图(Redprint)是自定义的一个概念,其目的是为了解决蓝图(Blueprint)在大型项目中的一些问题,红图和蓝图类似,但它允许我们更灵活地管理路由。

比如现在有两个路由:/v1/book/get/v1/user/get,如何去定义路由?
方式一:

# 在注册蓝图时,使用 url_prefix 来解决
book = Blueprint('book', __name__)
app.register_blueprint(book, url_prefix='/v1/book')

user = Blueprint('user', __name__)
app.register_blueprint(user, url_prefix='/v1/user')

方式二:

# 在注册视图函数时,直接在路由中指定
book = Blueprint('book', __name__)
@book.route("/book/get")
def get_book():
    return 'get book'
app.register_blueprint(book, url_prefix='/v1')

user = Blueprint('user', __name__)
@user.route("/user/get")
def get_user():
    return 'get user'
app.register_blueprint(user, url_prefix='/v1')

上面两种创建路由的方式都不是很完美,都得写重复的代码,因此我们可以仿照蓝图的功能,照猫画虎的写一个叫做红图的类去做这件事,结构如下图所示:

image

2.1. 红图的注册和使用

下面是使用红图的一个例子:

项目整体的目录结构图

# 项目整体的目录结构图

│
├─flask_server
│  ├─ app.py
│  ├─ book.py
│  ├─ redprint.py
│  └─ user.py

首先,我们需要定义自己的 Redprint 类:

# 在 redprint.py 文件中
class Redprint():
    def __init__(self, name):
        self.name = name
        self.mound = []

    def route(self, rule, **options):
        def decorator(f):
            self.mound.append((f, rule, options))
            return f
        return decorator

    def register(self, bp, url_prefix=None):
        if url_prefix is None:
            url_prefix = '/' + self.name
        for f, rule, options in self.mound:
            # 仿照 Blueprint 中 route 方法的写法
            endpoint = options.pop("endpoint", f.__name__)
            bp.add_url_rule(url_prefix + rule, endpoint, f, **options)

然后,在我们的模块中使用这个 Redprint 替代原来的 Blueprint

# 在 book.py 文件中
from redprint import Redprint

book = Redprint('book')

@book.route('/get')
def get_book():
    return 'get book'
# 在 user.py 文件中
from redprint import Redprint

user = Redprint('user')

@user.route('/get')
def get_user():
    return 'get user'

最后,在主应用文件中注册这些 Redprint 到一个 Blueprint 上,这就是我们的 URL 前缀 '/v1' 出现的地方

# 在 app.py 或你的主文件中
from flask import Flask


def register_blueprints(app):
    from flask import Blueprint
    from book import book
    from user import user

    # 定义一个蓝图
    bp_v1 = Blueprint('v1', __name__)

    # 将红图注册到蓝图中
    book.register(bp_v1)
    user.register(bp_v1)

    # 将蓝图注册到 flask 核心对象中
    app.register_blueprint(bp_v1, url_prefix='/v1')


app = Flask(__name__)
# 调用注册蓝图的函数
register_blueprints(app)


if __name__ == '__main__':
    app.run(debug=True)

这样,所有注册到 'v1' BlueprintRedprint 都会拥有 '/v1' 这个 URL 前缀。如果想要改变这个前缀,只需要在 app.register_blueprint 中修改它即可。

标签:__,get,Flask,app,蓝图,book,user,红图
From: https://www.cnblogs.com/wanghuizhao/p/17731557.html

相关文章

  • 山海鲸智慧交通解决方案demo——构建未来城市出行的数字蓝图
    随着城市化进程的不断加速,城市交通问题也变得日益严重。为了改善城市交通体验、提高出行效率以及减少交通拥堵和环境污染。山海鲸可视化打造城市智慧交通系列解决方案模板,解决方案以“数字孪生技术”为核心,通过数据分析、人工智能和物联网技术来优化城市出行,下面带大家详细了解一......
  • flask框架在Centos正常启动后到Windows浏览器访问(http://192.168.124.129:5550/)提示无
    1、flask在centos正常启动 2、然后复制链接到window访问,提示无法访问3、排查下,Linux和Windows互相ping下WindowpingLinuxIP LinuxpingWindowIP如上能够正常ping通,说明网段是正常的4、再排查下,Linux是不是防火墙没有关闭查看防火墙状态命令:systemctlstatusfir......
  • 什么是蓝图?
    将变量、函数、事件,以一种可视化的流程图的方式进行关联的工具 它的根节点是一个脚本。变量值和函数之间通过"目标"属性来关联。不同变量之间通过函数而产生联系......
  • flask配置log
    flask配置logimportloggingfromlogging.handlersimportRotatingFileHandlerapp=Flask(__name__)#配置日志记录级别,在这里,将日志记录级别设置为DEBUG,意味着所有DEBUG及以上级别的日志消息都会被记录。这样可以方便地在调试过程中查看更详细的日志信息。app.logg......
  • Flask入门
    sudosed-i's/http:\/\/archive.ubuntu.com/http:\/\/mirrors.aliyun.com/g'/etc/apt/sources.listsudoaptupdate&&sudoaptupgrade-ysudoapt-getupdate--fix-missing python3--versionPython3.10.12python3.10-venvUbuntu22.04Pyth......
  • 基于Python+Flask实现一个TODO任务管理系统网站
    随着科技的进步,数字化的任务清单逐渐成为生活中不可或缺的一部分。它们不仅可以帮助我们跟踪日常任务,还可以提高效率。但是,你是否考虑过自己制作一个任务管理系统呢?好消息是,使用Python和Flask,我们可以轻松快捷地构建一个。今天,我将向大家展示如何实现一个简单、易用的TODO任务管......
  • flask从入门到精通之钩子、异常、context、jinjia模板、过滤器
    一、请求全局钩子【hook】此处的全局钩子,其实就是类似django里面的中间件。也就是只要调用或者注册了,在http请求响应中是必然执行的。在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:在项目运行开始时,建立数据库连接,或创建连接池;在客户端请求开始时,根据......
  • PPT| 企业CRM系统建设项目蓝图汇报方案 P25
    本人在咨询机构从事咨询工作多年,二十年一线数字化规划咨询经验,提供制造业数智化转型规划服务,顶层规划/企业架构/数据治理/数据安全解决方案资料干货.【智能制造数字化咨询】该PPT共25页,如需完整原版 方案,点击右上角红色按钮关注+私信。......
  • python的flask框架部署网页过程报错及解决方案
    python安装好flask框架之后,创建一个flask的项目,运行发生以下报错UnicodeDecodeError:'utf-8'codeccan'tdecodebyte0xa1inposition4:invalidstartbyte原因是读取flask库源码的时候系统默认未使用‘utf-8’格式win10电脑->控制面板->区域->管理->更改系统区域设置......
  • Flask基础入门到精通之flask准备和路由
    一、前言Flask诞生于2010年,是Arminronacher(阿明·罗纳彻)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如......