当前位置: 首页 > news >正文

六、基于Flask、Flasgger、marshmallow的开发调试

基于Flask、Flasgger、marshmallow的开发调试

  • 问题描述
  • 调试方法一
  • 调试方法二
  • 调试方法三

问题描述

现在有一个传入传出为json格式文件的,Flask-restful开发的程序,需要解决如何调试的问题。

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Project    : combine all libraries examples.py
# @File    : RiGangTemplateTry.py
# @Time    : 2024/1/4 8:43
from flask import Flask, request
from flask_restful import Api, Resource
from flasgger import Swagger
from marshmallow import Schema, fields, ValidationError# 初始化 Flask 应用、API 和 Swagger
app = Flask(__name__)
api = Api(app)
swagger = Swagger(app)# 校验输入数据
class AgeSchema(Schema):name = fields.Str(required=True)age = fields.Integer(required=True)# 校验输出数据
class AgeStatSchema(Schema):average_age = fields.Float()max_age = fields.Integer()min_age = fields.Integer()class AgeStats(Resource):def post(self):"""Upload JSON and Calculate Age Stats---consumes:- application/jsonparameters:- in: bodyname: bodyschema:id: AgeInputtype: arrayitems:type: objectrequired:- name- ageproperties:name:type: stringage:type: integerdescription: JSON array with names and agesresponses:200:description: Age statisticsschema:id: AgeStatsproperties:average_age:type: numberformat: floatdescription: The average age of the submitted agesmax_age:type: integerdescription: The maximum age of the submitted agesmin_age:type: integerdescription: The minimum age of the submitted ages"""json_data = request.get_json()# 校验 JSON 数据try:results = AgeSchema(many=True).load(json_data)except ValidationError as err:return err.messages, 400# 计算平均年龄、最大年龄和最小年龄ages = [person['age'] for person in results]average_age = sum(ages) / len(ages)max_age = max(ages)min_age = min(ages)# 序列化输出数据stats_schema = AgeStatSchema()return stats_schema.dump({'average_age': average_age,'max_age': max_age,'min_age': min_age}), 200class UserSchema(Schema):username = fields.Str(required=True)email = fields.Email(required=True)class User(Resource):def get(self, username):"""Get User Endpoint---parameters:- in: pathname: usernametype: stringrequired: truedescription: The username of the userresponses:200:description: The user informationschema:id: UserResponseproperties:username:type: stringdescription: The username of the useremail:type: stringdescription: The email of the userexamples:application/json: { "username": "johndoe", "email": "john@example.com" }"""# 示例数据,实际应用中这里会是数据库查询等操作user_data = {"username": username, "email": f"{username}@example.com"}# 使用 Marshmallow Schema 校验和序列化数据user_schema = UserSchema()return user_schema.dump(user_data), 200api.add_resource(User, '/users/<string:username>')
api.add_resource(AgeStats, '/age_stats')if __name__ == '__main__':app.run(debug=True)

调试方法一

通过http://127.0.0.1:5000/apidocs/已经可以便捷的查看代码中的api数据。
在这里插入图片描述
但是在测试代码的时候仍然需要手动输入调试json数据在界面上
在这里插入图片描述

调试方法二

要使用您的Flask应用进行测试,您可以采用以下步骤:

  1. 确保您的环境已经安装了所有必需的库。如果还没有安装,您可以使用pip来安装它们:
pip install flask flask-restful flasgger marshmallow
  1. 保存并运行您的Flask应用。将您的脚本保存为一个.py文件,例如app.py,然后在命令行中运行它:
python app.py
  1. 准备您的测试数据。创建一个JSON文件data.json,包含您想要测试的数据,例如:
[{"name": "Alice", "age": 30},{"name": "Bob", "age": 25},{"name": "Charlie", "age": 35}
]
  1. 使用curl命令或者Postman等工具发送请求

使用curl发送POST请求:

curl -X POST -H "Content-Type: application/json" -d @data.json http://127.0.0.1:5000/age_stats

确保您的Flask应用正在运行,并且使用了data.json文件中的正确路径。

如果您更喜欢图形界面,可以使用Postman

  • 打开Postman。
  • 创建一个新的POST请求。
  • 在URL栏输入http://127.0.0.1:5000/age_stats
  • 在Headers部分,添加一个新的条目。对于key填入Content-Type,对于value填入application/json
  • 在Body部分,选择raw,然后从下拉菜单中选择JSON。
  • data.json文件中的数据复制并粘贴到raw文本区域中。
  • 点击Send。
  1. 观察响应。无论是curl还是Postman,您都应该收到一个包含平均年龄、最大年龄和最小年龄的JSON响应。

  2. 调试。如果测试没有按预期进行,您可以在Flask应用中添加print语句或使用Python的pdb模块来调试。您还可以检查Postman或终端中的错误信息来帮助诊断问题。

如果您遇到400 Bad Request错误,这通常意味着您的输入数据不符合AgeSchema的要求。在这种情况下,检查您的JSON数据确保每个对象都有nameage字段,并且age是一个整数。

在这里插入图片描述

调试方法三

写一个调试的脚本,使用Request调试

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Project    : combine all libraries examples.py
# @File    : TestRiGangTemplateTry.py
# @Time    : 2024/1/4 9:15import requests
import json# 设置您的API端点
url = 'http://127.0.0.1:5000/age_stats'# 准备您的测试数据
data = [{"name": "Alice", "age": 30},{"name": "Bob", "age": 25},{"name": "Charlie", "age": 35}
]# 将数据转换为JSON格式
json_data = json.dumps(data)# 发送POST请求
response = requests.post(url, data=json_data, headers={'Content-Type': 'application/json'})# 打印响应
print('Status Code:', response.status_code)
print('Response Body:', response.text)

在这里插入图片描述

相关文章:

六、基于Flask、Flasgger、marshmallow的开发调试

基于Flask、Flasgger、marshmallow的开发调试 问题描述调试方法一调试方法二调试方法三 问题描述 现在有一个传入传出为json格式文件的&#xff0c;Flask-restful开发的程序&#xff0c;需要解决如何调试的问题。 #!/usr/bin/python3 # -*- coding: utf-8 -*- # Project :…...

TypeScript 从入门到进阶之基础篇(三) 元组类型篇

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇 持续更新中… 文章目录 …...

现代CPU的多种运行模式

目前的CPU大多是支持X86-64技术的兼容CPU&#xff0c;这包括AMD64以及Intel的IA32E&#xff08;后被正式命名为EM64T&#xff0c;Extended Memory 64 Technology&#xff09;&#xff0c;因为AMD64先出&#xff0c;而EM64T与AMD64完全兼容&#xff0c;所以也统一称为AMD64技术。…...

Python PDF处理模块pypdf库详解

概要 PDF&#xff08;Portable Document Format&#xff09;是一种常见的文档格式&#xff0c;广泛用于存储和共享文本和图像数据。在 Python 中&#xff0c;有许多库可以用于处理 PDF 文件&#xff0c;其中之一就是 PyPDF。PyPDF 是一个功能强大的库&#xff0c;它允许你读取…...

C++上位软件通过LibModbus开源库和西门子S7-1200/S7-1500/S7-200 PLC进行ModbusTcp 和ModbusRTU 通信

前言 一直以来上位软件比如C等和西门子等其他品牌PLC之间的数据交换都是大家比较头疼的问题&#xff0c;尤其是C上位软件程序员。传统的方法一般有OPC、Socket 等&#xff0c;直到LibModbus 开源库出现后这种途径对程序袁来说又有了新的选择。 Modbus简介 Modbus特点 1 &#…...

PLSQL Developer 15安装和oracle客户端安装

文章目录 前言一、PLSQL Developer1.下载2.安装 二、oracle客户端1.下载2.环境变量 三、使用1. oci2. 连接3. 配置文件 总结 前言 oracle是经常使用的数据库&#xff0c;PLSQL Developer是众多产品中比较不错的一款工具&#xff0c;接下来我们来介绍PLSQL Developer的安装和使…...

【深度deepin】深度安装,jdk,tomcat,Nginx安装

目录 一 深度 1.1 介绍 1.2 与别的操作系统的优点 二 下载镜像文件及VM安装deepin 三 jdk&#xff0c;tomcat&#xff0c;Nginx安装 3.1 JDK安装 3.2 安装tomcat 3.3 安装nginx 一 深度 1.1 介绍 由深度科技社区开发的开源操作系统&#xff0c;基于Linux内核&#xf…...

解决flask启动报错:ImportError: DLL load failed while importing _dukpy: 找不到指定的程序

现象&#xff1a; 原因&#xff1a;dukpy没有win32执行库 解决办法&#xff1a; 到lfd.uci.edu 第三方库下载dukpy的win32 whl文件 注意&#xff1a; 需要跟你python版本和windows平台&#xff08;32位/64位&#xff09;对应 https://www.lfd.uci.edu/~gohlke/pythonlibs/#…...

腾讯面试总结

腾讯 一面 mysql索引结构&#xff1f;redis持久化策略&#xff1f;zookeeper节点类型说一下&#xff1b;zookeeper选举机制&#xff1f;zookeeper主节点故障&#xff0c;如何重新选举&#xff1f;syn机制&#xff1f;线程池的核心参数&#xff1b;threadlocal的实现&#xff…...

面向对象进阶(static关键字,继承,方法重写,super,this)

文章目录 面向对象进阶部分学习方法&#xff1a;今日内容教学目标 第一章 复习回顾1.1 如何定义类1.2 如何通过类创建对象1.3 封装1.3.1 封装的步骤1.3.2 封装的步骤实现 1.4 构造方法1.4.1 构造方法的作用1.4.2 构造方法的格式1.4.3 构造方法的应用 1.5 this关键字的作用1.5.1…...

Blazor项目如何调用js文件

以下是来自千问的回答并加以整理&#xff1a;&#xff08;说一句&#xff0c;文心3.5所给的回答不完善&#xff0c;根本运行不起来&#xff0c;4.0等有钱了试试&#xff09; 在Blazor项目中引用JavaScript文件&#xff08;.js&#xff09;以实现与JavaScript的互操作&#xff…...

Windows11 - Ubuntu 双系统及 ROS、ROS2 安装

系列文章目录 前言 一、Windows11 - Ubuntu 双系统安装 硬件信息&#xff1a; 设备名称 DESKTOP-B62D6KE 处理器 13th Gen Intel(R) Core(TM) i5-13500H 2.60 GHz 机带 RAM 40.0 GB (39.8 GB 可用) 设备 ID 7673EF86-8370-41D0-8831-84926668C05A 产品 ID 00331-10000-0000…...

深度学习(学习记录)

题型&#xff1a;填空题判断题30分、简答题20分、计算题20分、综合题&#xff08;30分&#xff09; 综合题&#xff08;解决实际工程问题&#xff0c;不考实验、不考代码、考思想&#xff09; 一、深度学习绪论&#xff08;非重点不做考察&#xff09; 1、传统机器学习&…...

html5实现好看的个人博客模板源码

文章目录 1.设计来源1.1 主界面1.2 认识我界面1.3 我的文章界面1.4 我的模板界面1.5 文章内容界面 2.结构和源码2.1 目录结构2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/135368653 html5实现好看…...

SpringSecurity深度学习

SpringSecurity简介 spring Security是什么&#xff1f; Spring Security 是一个强大且高度可定制的身份验证和访问控制框架&#xff0c;用于保护基于Spring的应用程序。它是Spring项目的一部分&#xff0c;旨在为企业级系统提供全面的安全性解决方案。 一个简单的授权和校验…...

odoo17 | 用户界面的基本交互

前言 现在我们已经创建了我们的新模型及其 相应的访问权限&#xff0c;是时候了 与用户界面交互。 在本章结束时&#xff0c;我们将创建几个菜单以访问默认列表 和窗体视图。 数据文件 &#xff08;XML&#xff09; Odoo在很大程度上是数据驱动的&#xff0c;因此模块定义的…...

Intel 性能监视器之二

全文来自Intel开发者手册&#xff1a;Intel? 64 and IA-32 Architectures Software Developer’s Manual Volume 3B System Programming Guide.pdf 注意&#xff1a;下文中已经指出手册中的对应页面和章节&#xff0c;请对照手册原文看&#xff0c;任何个人理解错误&#xff…...

Vert.x学习笔记-什么是事件总线

广义事件总线介绍Vert.x的事件总线Vert.x的事件总线的实现方式Vert.x的事件总线通信模式事件总线与消息队列的区别点对点通信模式请求-应答通信模式发布-订阅通信模式 Vert.x的事件总线应用场景Vert.x的事件总线消息Vert.x的事件总线消息示例Vert.x的事件总线的消息类型 拓展 广…...

STM32学习笔记二十二:WS2812制作像素游戏屏-飞行射击游戏(12)总结

至此&#xff0c;飞行射击游戏已经基本实现该有的功能&#xff0c;已经比较接近早期的商业游戏了。 如果采用脚本&#xff0c;可以完成关卡游戏&#xff0c;如果不用&#xff0c;也可以做成无限挑战游戏。 我们汇总一下制作的过程&#xff1a; 1、建模UML 2、主循环处理过程…...

astadmin安装querylist插件Puppeteer

我本来是想在linux服务器上安装&#xff0c;折腾了一天也没安装成功&#xff0c;由于急着用&#xff0c;就先做window10上安装了&#xff0c;以后有时间再研究centos7上安装 一 首先需要安装fastadmin 框架和querylist插件 这个大家可以自行安装&#xff0c;querylist安装地址…...

Python从入门到网络爬虫(MySQL链接)

前言 在实际数据分析和建模过程中&#xff0c;我们通常需要从数据库中读取数据&#xff0c;并将其转化为 Pandas dataframe 对象进行进一步处理。而 MySQL 数据库是最常用的关系型数据库之一&#xff0c;因此在 Python 中如何连接 MySQL 数据库并查询数据成为了一个重要的问题…...

2020年认证杯SPSSPRO杯数学建模A题(第二阶段)听音辨位全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 A题 听音辨位 原题再现&#xff1a; 把若干 (⩾ 1) 支同样型号的麦克风固定安装在一个刚性的枝形架子上 (架子下面带万向轮&#xff0c;在平地上可以被水平推动或旋转&#xff0c;但不会歪斜)&#xff0c;这样的设备称为一个麦克风树。不同的麦…...

深入理解CRON表达式:时间调度的艺术

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…...

网络安全—模拟IP代理隐藏身份

文章目录 网络拓扑安装使用代理服务器设置隐藏者设置 使用古老的ccproxy实现代理服务器&#xff0c;仅做实验用途&#xff0c;禁止做违法犯罪的事情&#xff0c;后果自负。 网络拓扑 均使用Windows Server 2003系统 Router 外网IP&#xff1a;使用NAT模式 IP DHCP自动分配或者…...

Resilience4j相关问题及答案(2024)

1、什么是Resilience4j&#xff0c;与Hystrix有何不同&#xff1f; Resilience4j是一个为Java 8和函数式编程设计的故障恢复库&#xff0c;它主要利用了Vavr库中的函数式编程概念。Resilience4j提供了一系列的故障恢复机制&#xff0c;包括断路器&#xff08;Circuit Breaker&…...

XSKY SDS 产品率先获得 OceanBase V4 新版本认证

近日&#xff0c;北京奥星贝斯科技有限公司&#xff08;简称&#xff1a;OceanBase&#xff09;与北京星辰天合科技股份有限公司&#xff08;简称&#xff1a;XSKY 星辰天合&#xff09;顺利完成产品兼容性认证。 XSKY 的高性能全闪存储以及混闪存储&#xff0c;与 OceanBase V…...

系统学习Python——类(class):静态方法(staticmethod)和类方法(classmethod)-[基础知识]

分类目录&#xff1a;《系统学习Python》总目录 我们可以在类中定义两种方法&#xff0c;它们不需要一个实例就可以被调用&#xff1a;静态方法&#xff08;staticmethod&#xff09;大致与一个类中简单的无实例函数的工作方式类似&#xff0c;而类方法则被传人一个类而不是一个…...

kotlin isEmpty/isNotEmpty/isNullOrEmpty和isBlank/isNotBlank/isNullOrBlank

kotlin 中 isEmpty &#xff1a;如果判断的字符为空返回值返回true否则返回false 它的源码 kotlin.internal.InlineOnly public inline fun CharSequence.isEmpty(): Boolean length 0 length 0: 首先检查字符序列的长度是否为 0。如果长度为 0&#xff0c;则表明这个字…...

Qt/QML编程学习之心得:Linux下USB接口使用(25)

很多linux嵌入式系统都有USB接口,那么如何使用USB接口呢? 首先,linux的底层驱动要支持,在linux kernal目录下可以找到对应的dts文件,(device tree) usb0: usb@ee520000{compatible = "myusb,musb";status = "disabled";reg = <0xEE520000 0x100…...

概率论与数理统计 知识点+课后习题

文章目录 &#x1f496; [学习资源整合](https://www.cnblogs.com/duisheng/p/17872980.html)&#x1f4da; 总复习&#x1f4d9; 选择题&#x1f4d9; 填空题&#x1f4d9; 大题1. 概率2. 概率3. 概率4. P5. 概率6. 概率密度函数 F ( X ) F(X) F(X)7. 分布列求方差 V ( X ) …...

b2c商城源代码/网站seo啥意思

今天看到java里有好多类都有线程安全和不安全这样两种说法&#xff0c;之前一直扳动不懂&#xff0c;今天就查了一下&#xff0c;也很简单&#xff0c;很快就搞明白了。 首先分享两篇博文&#xff0c;这两篇博文合起来看就可以完全理解什么是线程安全以及不安全及什么叫某个类是…...

用dede做的网站首页/免费行情网站app大全

category.php页面&#xff0c;有其默认的排序方式&#xff0c;但是现在要实现的排序方式&#xff1a;首页广告位的产品链接地址&#xff1a;category.php?id3&gid4(id&#xff0c;是分类ID默认的&#xff1b;gid&#xff0c;是自定义增加的&#xff0c;产品的ID)&#xff…...

河北省建设机械协会是真的网站吗/直播:英格兰vs法国

数据元素之间的逻辑关系的整体称为数据的逻辑结构。现实中&#xff0c;数据元素的逻辑关系千变万化&#xff0c;而数据结构课程中讨论的逻辑关系主要是指数据元素之间的相邻关系&#xff0c;如果两个数据元素是相邻的&#xff0c;说明它们之间是有关系的&#xff0c;否则它们之…...

网站建设中有关数据库问题/优化营商环境心得体会

当我们需要创建 Elasticsearch 索引时&#xff0c;数据源通常没有规范化&#xff0c;无法直接导入。 原始数据可以存储在数据库、原始 CSV/XML 文件中&#xff0c;甚至可以从第三方 API 获取。 在这种情况下&#xff0c;我们需要对数据进行预处理以使其与 Bulk API 一起使用。 …...

wordpress图片远程/关键词列表

原标题&#xff1a;(麦咭智能机器人价格及说明(麦咭智能机器人怎么恢复出厂设置))近年来&#xff0c;儿童智能产品也越来越多&#xff0c;它们到底是“真智能”还是“假智能”&#xff1f;用起来是否方便&#xff1f;为了给家长找到一款靠谱的产品&#xff0c;小编经过多方调研…...

甘肃省路桥建设集团网站/汽车推广软文

一.xlrd模块 官方文档:https://pypi.org/project/xlrd/ 1.概述 (1)功能: xlrd是用于读取Excel文件数据的Python库,支持支持xlsx和xls格式(2)安装: pip install xlrd2.对象 (1)Excel文件: xlrd.book.Book()##############################################################…...