学习使用Flask模拟接口进行测试
-
前言
学习使用一个新工具,首先找一段代码学习一下,基本掌握用法,然后再考虑每一部分是做什么的
-
Flask的初始化
app = Flask(__name__):初始化,创建一个该类的实例,第一个参数是应用模块或者包的名称
-
@app.route()的用法
@app.route('/detect', methods=['POST']):通过使用route()装饰器的方法定义一个路由地址,/detect是接口的uri,使用 route() 装饰器告诉 Flask 什么样的URL能触发我们的函数,这个函数的名字也在生成 URL 时被特定的函数采用,这个函数返回我们想要显示在用户浏览器中的信息;methods=['POST']表示只接受POST方法访问,methods=['GET']表示只接受GET方法访问,methods=['POST', 'GET']表示两种方法都接受。
-
app.run的用法
app.run(host='0.0.0.0', port=1000,debug=True):用 run() 函数来让应用运行在本地服务器上。其中host为要监听的主机名, 默认为127.0.0.1(localhost),设置为“0.0.0.0”以使服务器在外部可用,port是设置的端口号,port不填的话默认5000,debug默认为false,如果设置为true,则提供调试信息;若是在docker中使用,记得docker要把对应的端口映射到主机;
-
python和flask中返回JSON数据的方法如下:
字典转化为JSON的数据格式:return json.dumps(result_dict,ensure_ascii=False) #result_dict为字典数据,使用json转换的在前端显示的数据为JSON字符串;
使用flask的jsonify转换后,在前台显示的为JSON对象:return jsonify(result_dict)
-
快速启动一个flask接口
使用这个环境
//略,这里涉及到工作环境了
在这个目录下:(使用python3)
/home/work/miniconda3/envs/bfc38/bin
实操:
这里涉及工作环境,略,基本上就是找到python3的目录之后,一定要调用对应的目录(比如这里是/home/work/miniconda3/envs/bfc38/bin)
就用 /home/work/miniconda3/envs/bfc38/bin/python3 test.py 来调用你想调用的py文件即可
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello flask!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8877, debug=True)
复制地址拿到浏览器里跑一下,出现hello flask说明跑通了
运行过程中修改文件(并保存的话)出现语法错误,会导致脚本终止
注:debug=True的用法:
在 Flask 中,`debug` 参数用于启动调试模式。当 `debug` 设置为 `True` 时,Flask 会在发生错误时提供详细的调试信息,同时还会监视文件的变化,使得您在修改代码后不必重新启动服务器。
在生产环境中,建议将 `debug` 设置为 `False`,因为调试模式可能会泄漏敏感信息,并且不适用于处理大量请求的情况。在生产环境中,最好使用一个成熟的服务器,如Gunicorn或uWSGI,并将 Flask 的调试模式关闭。
在开发阶段,启用调试模式可以更容易地发现和解决问题,因为它提供了有关代码执行过程中发生的错误的详细信息。但请务必在生产部署之前禁用调试模式以提高安全性。
-
详解flask接口测试
首先需要引入request包
from flask import request
-
如何关闭一个flask脚本
ps -af | grep python
找到对应进程的PID,然后使用kill PID杀掉对应的进程即可
注:这里的第二列就是PID,通过查看该进程对应的文件确定哪个是目标进程
(后续应该要系统学习一下linux的相关用法,倒不是不会用,就是不太熟)
1、需要对请求头进行测试
使用request.header获取请求头中的数据,比如请求头里面有一个test参数,那就是
args = request.header -- 这一步相当于取得了全部的请求头
之后,使用args.get("test")取得test这个key里面的值
test里面可以替换成任意请求头,其实就是一个字典(or map),用get取得key对应的value就可以了,下面的其他情况同理
2、需要对请求体进行测试
-
默认的表单(application/x-www-form-urlencoded)使用request.form ;
-
如果是json(application/json): request.json取出所有的键值对
具体哪种需要看请求头中的Conternt-Type 当然也有可能是其他的,下面补充一下常见的http请求数据类型(Content-Type)
Content-type 定义了 http 请求的数据类型。
如果设置在请求头中,则定义的是请求体的数据类型;
如果设置在响应头中,则定义的是响应体的数据类型;
请求头--Request-Headers:一般我们在 post 请求中会向服务器发送一些参数,那我们就可以通过这个参数设置 post 的参数格式
application/json:JSON 数据格式;
application/x-www-form-urlencoded:表单默认的提数据格式;
multipart/form-data:一般用于文件上传;
响应头--Response-Headers:响应头里的 Content-Type 参数会告诉我们响应数据的格式,一般我们可以在请求头里面设置我们想要的数据格式(Accept);
以下是常见的Content-Type:
text开头
text/html: HTML格式
text/plain:纯文本格式
text/xml: XML格式
图片格式
image/gif :gif 图片格式
image/jpeg :jpg 图片格式
image/png:png 图片格式
application开头
application/xhtml+xml:XHTML 格式
application/xml:XML 数据格式
application/atom+xml:Atom XML 聚合格式
application/json:JSON 数据格式
application/pdf:pdf 格式
application/msword:Word 文档格式
application/octet-stream:二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded:表单发送默认格式
媒体文件
audio/x-wav:wav文件
audio/x-ms-wma:w文件
audio/mp3:mp3文件
video/x-ms-wmv:wmv文件
video/mpeg4:mp4文件
video/avi:avi文件
3、需要对url中附带的请求参数进行测试
请求参数是指
http://127.0.0.1:5000/query?id=1 里面的 「?id=1」这部分
需要用request.arg提取这部分参数,之后的处理和第一条一样
示例
@app.route('/query') # http://127.0.0.1:5000/query?id=1&name=zhangsan
def query():
args = request.args # args 请求的参数
args_dict = args.to_dict() # 获取请求参数 字典格式
name = args.get('name')
print(args) # [('id', '1'), ('name', 'zhangsan')]
print(args_dict) # {'id': '1', 'name': 'zhangsan'}
print(name) # zhangsan
return '查询参数== 姓名:%s' % name
4、获取固定参数
@app.route('/fixed/<int:id>/<name>')
def fixed(id, name):
print(id)
print(name)
return '固定参数'
5、补充
可供参考
Flask基础:请求数据获取与响应_flask获取前端数据-CSDN博客
Flask中获取参数(路径,查询,请求体,请求头)-CSDN博客
基于Flask进行接口开发及测试_chrome测试 flask接口-CSDN博客
相关文章:

学习使用Flask模拟接口进行测试
前言 学习使用一个新工具,首先找一段代码学习一下,基本掌握用法,然后再考虑每一部分是做什么的 Flask的初始化 app Flask(__name__):初始化,创建一个该类的实例,第一个参数是应用模块或者包的名称 app…...

深度学习快速入门--7天做项目
深度学习快速入门--7天做项目 0. 引言1. 本文内容2. 深度学习是什么3. 项目是一个很好的切入点4. 7天做项目4.1 第一天:数据整理4.2 第二天:数据处理4.3 第三天:简单神经网络设计4.4 第四天:分析效果与原因4.5 第五天:…...

Request Response 基础篇
Request & Response 在之前的博客中,初最初见到Request和Response对象,是在Servlet的Service方法的参数中,之前隐性地介绍过Request的作用是获取请求数据。通过获取的数据来进行进一步的逻辑处理,然后通过对Response来进行数…...
数据爬虫是什么
数据爬虫是一种自动化程序,用于从互联网上收集数据。它通过模拟人类浏览器的行为,访问网页并提取所需的数据。数据爬虫通常使用网络爬虫框架或库来实现。 数据爬虫的工作流程通常包括以下几个步骤: 发起请求:爬虫发送HTTP请求到…...
Java注解与策略模式的奇妙结合:Autowired探秘
大家好,欢迎收听今天的播客节目!我是你们的主持人,也是一位对软件开发充满热情的开发者。在今天的节目中,我们将探讨如何巧妙地结合注解与策略模式,创建一个灵活而强大的策略规则工厂。让我们带着好奇的心情一同深入研…...

Datax3.0+DataX-Web部署分布式可视化ETL系统
一、DataX 简介 DataX 是阿里云 DataWorks 数据集成的开源版本,主要就是用于实现数据间的离线同步。DataX 致力于实现包括关系型数据库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各种异构数据源(即不同的数据库&#x…...

【Java 数据结构】排序
排序算法 1. 排序的概念及引用1.1 排序的概念1.2 常见的排序算法 2. 常见排序算法的实现2.1 插入排序2.1.1 直接插入排序2.1.2 希尔排序( 缩小增量排序 ) 2.2 选择排序2.2.1 直接选择排序2.2.2 堆排序 2.3 交换排序2.3.1冒泡排序2.3.2 快速排序2.3.3 快速排序非递归 2.4 归并排…...

Deepin如何开启与配置SSH实现无公网ip远程连接
文章目录 前言1. 开启SSH服务2. Deppin安装Cpolar3. 配置ssh公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 前言 Deepin操作系统是一个基于Debian的Linux操作系统,专注于使用者对日常办公、学习、生活和娱乐的操作体验的极致࿰…...

【Springcloud篇】学习笔记十(十七章):Sentinel实现熔断与限流——Hystrix升级
第十七章_Sentinel实现熔断与限流 1.Sentinel介绍 1.1是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 用来代替Hystrix Sentinel 具有…...

【算法与数据结构】718、1143、LeetCode最长重复子数组 最长公共子序列
文章目录 一、718、最长重复子数组二、1143、最长公共子序列三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、718、最长重复子数组 思路分析: 第一步,动态数组的含义。 d p [ i ] [ j ] dp[i]…...

C# SSH.NET 长命令及时返回
在SSH中执行长时间的命令,SSH.NET及时在文本框中返回连续显示结果。 c# - Execute long time command in SSH.NET and display the results continuously in TextBox - Stack Overflow 博主管理了一个服务器集群,准备上自动巡检工具,测试在…...

Rust学习之Features
Rust学习之Features 一 什么是 Features二 默认 feature三 简单的features应用示例四 可选(optional)的依赖五 依赖的特性5.1 在依赖表中指定5.2 在features表中指定 六 命令行中特性控制七 特性统一路径八 其它8.1 相互排斥特性8.2 观察启用特性8.3 Feature resolver version …...

云计算基础(云计算概述)
目录 一、云计算概述 1.1 云计算的概念 1.1.1 云计算解决的问题 1.1.2 云计算的概念 1.1.3 云计算的组成 1.2 云计算主要特征 1.2.1 按需自助服务 1.2.2 泛在接入 1.2.3 资源池化 1.2.4 快速伸缩性 1.2.5 服务可度量 1.3 云计算服务模式 1.3.1 软件即服务(Softwar…...

【机器学习】科学库使用手册第2篇:机器学习任务和工作流程(已分享,附代码)
本系列文章md笔记(已分享)主要讨论人工智能相关知识。主要内容包括,了解机器学习定义以及应用场景,掌握机器学习基础环境的安装和使用,掌握利用常用的科学计算库对数据进行展示、分析,学会使用jupyter note…...

【React】前端项目引入阿里图标
【React】前端项目引入阿里图标 方式11、登录自己的iconfont-阿里巴巴矢量图标库,把需要的图标加入到自己的项目中去;2、加入并进入到项目中去选择Font class 并下载到本地3、得到的文件夹如下4. 把红框中的部分粘贴到自己的项目中(public 文…...

Javascript入门:第三个知识点:javascript里的数据类型、运算符
数字类型 123 //整数 123.1 //浮点数 1.123e3 //科学计数法 -10 //负数 NaN //not a number Infinity //无限大 以上的类型在javascript里都是数字类型 字符串类型 在开始之前,我需要先说明白两个知识点: console.log()是啥? let 与 v…...

最新版国产会声会影2024新功能爆料
会声会影2024是一个视频编辑软件,具备以下功能: 会声会影2024安装包下载如下: https://wm.makeding.com/iclk/?zoneid55677 1. 视频剪辑:可以对视频进行剪辑、裁剪、拼接和分割操作,实现对视频片段的精确控制。 2. 音频编辑&…...
Pandas处理Excel文件的实用指南 - Python开发技巧XI
处理Excel文件是数据分析师日常工作中的常见任务之一。 幸运的是,Python的Pandas库提供了一套强大的工具,使得读取、处理和写入Excel文件变得既清晰又快捷。 在本篇博客中,我们将探讨如何使用Pandas的 read_excel 方法来读取Excel文件&#x…...

泰克示波器(TBS2000系列)触发功能使用讲解——边沿触发
# Trigger区域 触发区域用于对触发功能进行配置。示波器的触发功能用于采集(Acquire)那些在瞬间出现的信号,便于我们分析观察,此时可以当做逻辑分析仪使用。触发区域按钮包括:menu、Level\Force Trig三个。 目录 1.1 …...

C++学习Day01之C++对C语言增强和扩展
目录 一、程序及输出1.1 全局变量检测增强1.2 函数检测增强1.3 类型转换检测增强1.4 struct增强1.5 bool类型扩展1.6 三目运算符增强1.7 const增强1.7.1 全局Const对比1.7.2 局部Const对比1.7.3 Const变量初始化数组1.7.3 Const修饰变量的链接性 二、分析总结 一、程序及输出 …...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...

Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...