Flask 蓝图路由的模块化开发

基于 Flask 蓝图路由的模块化开发

1. 编程目标

为了提高Flask应用的可维护性和可扩展性,我们通过使用Flask的蓝图(Blueprint)功能,可以将不同的功能模块拆分到独立的文件中,方便后续的开发和维护。

2. 项目结构

项目结构树如下:

flask_project/
├── app.py  # 包含应用实例(如果是app包那么还包含配置文件)
├── controller/  # 包含所有的控制器(即路由处理模块)
│   ├── __init__.py
│   ├── user_controller.py
│   ├── article_controller.py
│   ├── comment_controller.py
├── tests/  # 测试脚本
│   ├── test_user.py
│   ├── test_article.py
│   ├── test_comment.py
├── requirements.txt  # 依赖包

3. 蓝图(Blueprint)

3.1 什么是蓝图(Blueprint)

蓝图(Blueprint)是Flask提供的一个功能,用于将应用的不同部分模块化。我们通过将不同的功能模块放在单独的蓝图中,我们可以更好地组织代码,提高代码的可维护性。

3.2 蓝图解决的问题

在我们的一个项目里头,如果所有的路由都写在一个文件中,会导致代码冗长且难以维护。
通过蓝图,可以将相关的路由和逻辑拆分到不同的模块中,使代码结构清晰,易于管理和维护。

3.3 蓝图的基本使用方法

蓝图的使用主要包括以下几个步骤:

  1. 创建蓝图实例

    from flask import Blueprint
    user_bp = Blueprint('user', __name__)
    
  2. 定义路由

    @user_bp.route('/add_user')
    def add_user():return "添加用户成功"
    
  3. 注册蓝图

    from flask import Flask
    app = Flask(__name__)
    app.register_blueprint(user_bp, url_prefix='/user')
    

通过这种方式,我们可以将不同功能的路由分开到不同的模块中,避免将所有路由写在一个文件中出现混乱、难以管理和维护的情况。

4. 实践示例:基于蓝图的模块化开发

4.1 用户管理模块

4.1.1 创建用户蓝图

controller文件夹下创建user_controller.py文件,并定义用户相关的蓝图和路由:

# -*- coding: utf-8 -*-
from flask import Blueprintuser_bp = Blueprint('user', __name__)@user_bp.route('/add', methods=['POST'])
def add_user():return "添加用户成功"@user_bp.route('/update', methods=['POST'])
def update_user():return "更新用户成功"
4.1.2 注册用户蓝图

在项目的入口文件app.py中注册用户蓝图:

# -*- coding: utf-8 -*-
from flask import Flask
from controller.user_controller import user_bpapp = Flask(__name__)
app.register_blueprint(user_bp, url_prefix='/user')if __name__ == '__main__':app.run(debug=True)

4.2 文章管理模块

4.2.1 创建文章蓝图

controller文件夹下创建article_controller.py文件,并定义文章相关的蓝图和路由:

# -*- coding: utf-8 -*-
from flask import Blueprintarticle_bp = Blueprint('article', __name__)@article_bp.route('/add', methods=['POST'])
def add_article():return "添加文章成功"@article_bp.route('/update', methods=['POST'])
def update_article():return "更新文章成功"
4.2.2 注册文章蓝图

在项目的入口文件app.py继续注册文章蓝图:

# -*- coding: utf-8 -*-
from flask import Flask
from controller.user_controller import user_bp
from controller.article_controller import article_bp
from controller.comment_controller import comment_bpapp = Flask(__name__)
app.register_blueprint(user_bp, url_prefix='/user')
app.register_blueprint(article_bp, url_prefix='/article')  # 继续注册文章蓝图if __name__ == '__main__':app.run(debug=True)

4.3 评论管理模块

同样的道理,按照上述步骤,创建并注册评论模块的蓝图:

  1. controller文件夹下创建comment_controller.py文件:
# -*- coding: utf-8 -*-
from flask import Blueprintcomment_bp = Blueprint('comment', __name__)@comment_bp.route('/add', methods=['POST'])
def add_comment():return "添加评论成功"@comment_bp.route('/update', methods=['POST'])
def update_comment():return "更新评论成功"
  1. 在项目的入口文件app.py继续注册评论蓝图:
# -*- coding: utf-8 -*-
from flask import Flask
from controller.user_controller import user_bp
from controller.article_controller import article_bp
from controller.comment_controller import comment_bpapp = Flask(__name__)
app.register_blueprint(user_bp, url_prefix='/user')
app.register_blueprint(article_bp, url_prefix='/article')  # 继续注册文章蓝图
app.register_blueprint(comment_bp, url_prefix='/comment')  # 继续注册评论蓝图if __name__ == '__main__':app.run(debug=True)

4.4 测试模块

tests/test_article.py

# -*- coding: utf-8 -*-
import requestsBASE_URL = "http://127.0.0.1:5000"def test_add_article():response = requests.post(f"{BASE_URL}/article/add")assert response.text == "添加文章成功"print(f"响应内容:{response.text}")def test_update_article():response = requests.post(f"{BASE_URL}/article/update")assert response.text == "更新文章成功"print(f"响应内容:{response.text}")test_add_article()
test_update_article()

tests/test_comment.py

# -*- coding: utf-8 -*-
import requestsBASE_URL = "http://127.0.0.1:5000"def test_add_comment():response = requests.post(f"{BASE_URL}/comment/add")assert response.text == "添加评论成功"print(f"响应内容:{response.text}")def test_update_comment():response = requests.post(f"{BASE_URL}/comment/update")assert response.text == "更新评论成功"print(f"响应内容:{response.text}")test_add_comment()
test_update_comment()

tests/test_user.py

# -*- coding: utf-8 -*-
import requestsBASE_URL = "http://127.0.0.1:5000"def test_add_user():response = requests.post(f"{BASE_URL}/user/add")assert response.text == "添加用户成功"print(f"响应内容:{response.text}")def test_update_user():response = requests.post(f"{BASE_URL}/user/update")assert response.text == "更新用户成功"print(f"响应内容:{response.text}")test_update_user()
test_add_user()

4.5 依赖包

requirements.txt

Flask==3.0.3
requests==2.26.0

5. 把它跑起来

  1. 创建项目结构:
    参考上述项目结构自行创建。

  2. 安装依赖:
    在项目根目录下,安装依赖。

    # 进入你的本地虚拟环境后,执行下述命令安装依赖
    pip install -r requirements.txt
    
  3. 运行应用:
    在项目根目录下, 运行 app.py 启动Flask应用。

    python app.py
    

运行效果如图:
在这里插入图片描述

  1. 测试接口:
    这里我们使用的是 requests 模块编写的测试脚本,它位于 flask_project/tests/ 目录下。
    在项目根目录下,进入tests目录下,然后运行这些测试脚本来测试接口功能。

    python test_article.py
    python test_comment.py
    python test_user.py
    

运行效果如图:
在这里插入图片描述
在这里插入图片描述

愿你的努力,被世界看到。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高斯过程学习笔记

目录 基础知识 例子 推荐 A Visual Exploration of Gaussian Processes (distill.pub) AB - Introduction to Gaussian Processes - Part I (bridg.land) 基础知识 高斯过程回归(Gaussian Process Regression) - 知乎 (zhihu.com) 高斯过程&#x…

马斯克xAI公司获60亿美元融资,超级计算工厂将于2025年秋季前问世

马斯克旗下的xAI公司宣布了一项令人瞩目的计划——建造一个名为“超级计算工厂”的巨型超级计算机。这一前所未有的项目不仅体现了马斯克对于人工智能(AI)技术的深刻洞察,也彰显了他在技术创新上的坚定决心。 据悉,超级计算工厂将…

7个靠谱的副业赚钱方法,个个都可以月入过万!宝妈,上班族,学生党都可以做的兼职副业

你是不是也有过这样的困扰,生活费不够用,想要找个兼职贴补家用或者满足自己的小欲望?今天,我就带你一起走进这个五彩斑斓的兼职世界,让你轻松实现月入过千的小目标! 在我多年的兼职探险历程中,我…

local dimming(局部调光)介绍

文章目录 1. 什么是local dimming2. 工作原理3. 类型4. 优点5. 缺点和局限7. 技术发展趋势 1. 什么是local dimming local dimming(局部调光)是电视和显示器中用于提升画面对比度和画质的背光技术。其基本原理是将背光源(通常是LED&#xff…

C++ ─── string的模拟实现

本博客将简单实现来模拟实现string类,最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。 下期我们继续讲解完整版string的模拟实现(将不再会是浅拷贝了) 说明:下述string类没有显式定义其拷贝构造函数与赋值运…

Java应用中文件上传安全性分析与安全实践

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. 文件上传的风险 二. 使用合适的框架和库 1. Spr…

从华为云Redis到AWS ElastiCache的操作方法

越来越多企业选择出海,那么就涉及到IT系统的迁移,本文将详细介绍如何将华为云Redis顺利迁移到AWS ElastiCache的操作方法,九河云将为您介绍迁移步骤以帮助您顺利完成这一重要任务。 **1. 确定迁移计划** 在开始迁移之前,首先要制…

科普:水冷负载的工作原理

水冷负载是一种利用水作为冷却介质,将电子设备产生的热量传递到外部环境的散热方式。它广泛应用于各种电子设备,如服务器、数据中心、电力设备等,以提高设备的运行效率和稳定性。本文将对水冷负载的工作原理进行简要科普。 水冷负载的工作原理…

NLP(17)--大模型发展(1)

前言 仅记录学习过程,有问题欢迎讨论 大模型的演化: ElMO : 类似双向lstm 结果和词向量拼接 预训练鼻祖 GPT :使用了Transformer 模型 开始使用Token (发现预训练的作用) Bert:认为双向比单向好 MLM(双向) 优于 LT…

【Linux】POSIX线程库——线程控制

目录 1.线程创建方法 例:多线程创建 2.线程终止 2.1 return nulptr; 2.2 pthread_exit(nullptr); 3. 线程等待 3.1 等待原因 3.2 等待方法 线程终止的返回值问题 4.线程取消 5. 线程分离 5.1 分离原因 5.2 分离方法 6.封装线程 用的接口是POSIX线程库…

音视频开发—音频相关概念:数模转换、PCM数据与WAV文件详解

文章目录 前言1.模拟数字转换(ADC)1.1ADC的关键步骤: 2.数字模拟转换(DAC)2.1DAC 的基本流程包括: 3.PCM数据3.1PCM 数据的关键要素包括: 4.WAV文件4.1 WAV的构成4.2WAV文件的标准块结构4.3WAV的…

OpenLayers6入门,OpenLayers实现在地图上拖拽编辑修改绘制图形

专栏目录: OpenLayers6入门教程汇总目录 前言 在前面一章中,我们已经学会了如何绘制基础的三种图形线段、圆形和多边形:《OpenLayers6入门,OpenLayers图形绘制功能,OpenLayers实现在地图上绘制线段、圆形和多边形》,那么本章将在此基础上实现图形的拖拽编辑功能,方便我…

使用Java 读取PDF表格数据并保存到TXT或Excel

目录 导入相关Java库 Java读取PDF表格数据并保存到TXT Java读取PDF表格数据并保存到Excel 在日常工作中,我们经常需要处理来自各种来源的数据。其中,PDF 文件是常见的数据来源之一。这类文件通常包含丰富的信息,其中可能包含重要的表格数据…

FreeRtos进阶——栈保存现场的几种场景

MCU架构 在认识栈的结构前,我们先来认识以下单片机的简单架构。在我们的CPU中有着很重要的一个模块——寄存器(R0-R15),其中R13,R14,R15的别称分别为SP栈顶指针、LR返回地址、PC当前指令地址。外部RAM是单片…

Android Gradle plugin 版本和Gradle 版本

1.当看到这两个版本时,确实有点迷糊。但是他们是独立的,没有太大关联。 就是说在Android studio中看到的两个版本信息,并无太大关联,是相互独立的。Gradle插件版本决定了你的项目是如何构建的,而Gradle版本是执行构建…

对竞品分析的理解

一、竞品分析是什么 竞品分析即对竞争对手进行分析,是市场研究中的一项重要工作,它可以帮助企业了解竞争对手的产品、策略、市场表现等信息,通过竞品分析可以为自己的产品制定更加精准的策略。 二、为什么要做竞品分析 1.了解市场情况 了解…

vue/core源码中ref源码的js化

起源: 当看见reactivity文件中的ref.ts文件长达五百多的ts代码后,突发奇想想看下转化成js有多少行。 进行转化: let shouldTrack true; // Define shouldTrack variable let activeEffect null; // Define activeEffect variable// 定义…

M2m中的采样

采样的完整代码 import torch import numpy as np from torchvision import datasets, transforms from torch.utils.data import DataLoader, WeightedRandomSampler, SubsetRandomSamplerdef get_oversampled_data(dataset, num_sample_per_class):""" Gener…

Upstream最新发布2024年汽车网络安全报告-百度网盘下载

Upstream最新发布2024年汽车网络安全报告-百度网盘下载 2024年2月7日,Upstream Security发布了2024年Upstream《GLOBAL AUTOMOTIVE CYBERSECURITY REPORT》。这份报告的第六版着重介绍了汽车网络安全的拐点:从实验性的黑客攻击发展到规模庞大的攻击&…

fpga系列 HDL 00 : 可编程逻辑器件原理

一次性可编程器件(融保险丝实现) 一次性可编程器件(One-Time Programmable Device,简称 OTP)是一种在制造后仅能编程一次的存储设备。OTP器件在编程后数据不可更改。这些器件在很多应用场景中具有独特的优势和用途。 …