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,一经查实,立即删除!

相关文章

C++设计模式之单例模式、模板模式、状态模式、原型模式、CRTP 模式、组件模式、观察者模式、发布-订阅模式、访问者模式

文章目录 参考 参考 游戏开发中经常用到的设计模式【C】游戏开发常用的设计模式,高手都这样写?单例模式、组件模式、原型模式、访问者模式等

假如Redis⾥里里⾯面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?

使⽤用 keys 指令可以扫出指定模式的 key 列列表。但是要注意 keys 指令会导致线程阻塞⼀一段时间,线上服务会停 顿,直到指令执⾏行行完毕,服务才能恢复。这个时候可以使⽤用 scan 指令, scan 指令可以⽆无阻塞的提取出指定模式 的…

高斯过程学习笔记

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

破译智能密码:大模型进阶之路

人工智能浪潮席卷全球,大模型(Large Language Models)作为其核心技术之一,正以惊人的速度改变着我们的世界。从创作诗歌、编写代码到提供医疗咨询,大模型在各行各业中展现出令人瞩目的能力。然而,要让这些“…

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

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

085.蛋糕案例:滚雪球式营销让蛋糕店的客户疯涨

085.蛋糕案例:滚雪球式营销让蛋糕店的客户疯涨 时间: 2024-5-27 分类: 营销流量 作者: admin 0 次浏览 085.蛋糕案例:滚雪球式营销让蛋糕店的客户疯涨 在美国的爱德华州,有一家叫FlyingPie 的比萨小店。店主人有一家网站,做得很乱…

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

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

15.2js数组练习题答案

(1)求出数组中的最大值 var arr[1,8,45,23,14,5]// 直接输出// console.log(Math.max(...arr))// 封装函数function fn(argArr){return Math.max(...argArr)}var res1fn(arr)console.log(res1) //45//复用函数var res2fn([65,32,656,87,56,48])con…

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…

java项目技术方案——书写示例

在编写一个Java项目的技术方案时,我们需要考虑多个方面,包括项目架构、技术栈、开发工具、数据持久化、安全性、代码结构等。以下是一个基于Spring Boot框架的Java Web项目的技术方案示例,包括代码示例。 1. 项目概述 本Java项目是一个基于…

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

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

slam的应用场景与落地步骤

常用的slam有2d 3d,激光和视觉slam。本文简要介绍一下slam的应用场景,和落地方案。 常用的2d框架有,gmapping ,cartographer, hector, 3d激光有loam aloam lio-sam, fast-lio fastlio2, 视觉有orbslam2/3, vio等 常用的slam传感器有&#xff…

Maven重新加载jar包

环境:Windows maven版本:3.9.6 1.下载maven Index of /dist/maven/maven-3/3.9.6/source 2.配置maven环境变量 例如: MAVEN_HOME:D:\tools\apache-maven-3.9.6(maven的本地地址) 在Path目录后添加;%MAVEN_HOME%\bin; 3.打开cmd&#xf…

【线性代数】【一】1. 线性方程组与线性组合

文章目录 前言一、线性方程组的求解1.1 直线的交点1.2 向量的加权求和 二、线性组合的表示范围三、线性方程组的解的分析总结 前言 有段时间没更新了,准备开个新坑,写点数学基础相关的内容,计划先过一遍线性代数,再扩展到矩阵论&…

什么是http状态码?常见的有哪些?它们所代表什么含义?

HTTP状态码是由HTTP协议定义的一组三位数字,用于表示服务器对请求的处理结果的状态。 常见的HTTP状态码及其含义如下: - 1xx:信息性状态码,表示请求已被接收,继续处理。 - 100:Continue(继…

【机器学习01】基本概念

机器学习是计算机科学的一个分支,通过算法和统计模型使计算机系统能够在没有明确指令的情况下执行特定任务。机器学习的核心思想是从数据中学习规律,并基于这些规律进行预测或决策。以下是机器学习的一些基本数学定义和概念: 1. 数据集 (Dat…

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

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

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

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