学习使用Flask模拟接口进行测试

news2024/11/15 11:14:21
  • 前言

学习使用一个新工具,首先找一段代码学习一下,基本掌握用法,然后再考虑每一部分是做什么的

  • 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

实操:

 

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说明跑通了

运行过程中修改文件出现语法错误,会导致脚本终止

切换请求路径:

  • 详解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博客

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

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

相关文章

Vertica单点更改服务器ip

需求 服务器网段调整&#xff0c;将ip&#xff1a;192.168.40.190收回&#xff0c;使用ip&#xff1a;192.168.40.200 默认情况下&#xff0c;节点 IP 地址和导出 IP 地址配置相同的 IP 地址。导出地址是网络上有权访问其他 DBMS 系统的节点的 IP 地址。使用导出地址从 DBMS …

elk之安装和简单配置

写在前面 本文看下elk的安装和简单配置&#xff0c;安装我们会尝试通过不同的方式来完成&#xff0c;也会介绍如何使用docker&#xff0c;docker-compose安装。 1&#xff1a;安装es 1.1&#xff1a;安装单实例 下载es安装包 在这里 下载&#xff0c;下载后解压到某个目录…

KubeSphere 核心实战之四【在kubesphere平台上部署Ruoyi-cloud项目】(实操篇 4/4)

**《KubeSphere 核心实战系列》** KubeSphere 核心实战之一&#xff08;实操篇 1/4&#xff09; KubeSphere 核心实战之二&#xff08;实操篇 2/4&#xff09; KubeSphere 核心实战之三&#xff08;实操篇 3/4&#xff09; KubeSphere 核心实战之四&#xff08;实操篇 4/4&…

Chiplet,汽车“芯”风向

异构集成、高速互联、算力灵活可扩展正在成为新一轮汽车芯片竞争的焦点。尤其是随着以ChatGPT为代表的大数据、大模型产品在车端的落地&#xff0c;对于芯片的要求还在持续提升。 本周&#xff0c;12家日本汽车制造商&#xff08;包括丰田、日产、本田等&#xff09;、零部件制…

数据结构之单链表详解

前言 之前大摆了5天多&#xff0c;没怎么学编程&#xff0c;自昨日起&#xff0c;觉不可如此&#xff0c;痛定思痛&#xff0c;开始继续学习&#xff0c;昨天刷了20多道简单级别的力扣&#xff0c;今天想把链表好好巩固一下&#xff0c;于是乎&#xff0c;把单链表的增删查改搞…

【linux|java应用报错】Cannot allocate memory

启动一个java应用报Cannot allocate memory&#xff0c;并且会生产一个hs_ess_pid.log文件。 文件内容为&#xff1a; #内存不足&#xff0c;Java运行时环境无法继续。 #本机内存分配&#xff08;mmap&#xff09;无法映射4294967296字节以提交保留内存。 【排查】 1、尝试使…

【日常总结】如何快速迁移Navicat中的全部连接设置到新安装的Navicat中?

一、场景 二、需求 三、解决方案 Stage 1&#xff1a;“文件”-->“导出连接”。 Stage 2&#xff1a;获取备份文件 connections.ncx Stage 3&#xff1a;导入connections.ncx 四、不足 一、场景 公司电脑换新&#xff0c;所有软件需要重装&#xff0c;包括navicat 1…

《golang设计模式》第三部分·行为型模式-10-模板方法(Template Method)

文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 模板方法&#xff08;Template Method&#xff09;用来定义算法的框架&#xff0c;将算法中的可变步骤定义为抽象方法&#xff0c;指定子类实现或重写。 1.1 角色 AbstractClass&#xff08;…

【脑电信号处理与特征提取】P5-彭薇薇:脑电信号的预处理及数据分析要点

彭薇薇&#xff1a;脑电信号的预处理及数据分析要点 脑电 脑电是神经活动的测量方法&#xff0c;在不同位置测量有不同的方法。比如大脑皮层表面测量的是ECoG&#xff0c;在头皮测量的是EEG。除了EEG是无损的&#xff0c;其他都是有损的。 脑电信号采集系统 下面是完整的…

指针操作一维字符型数组和及回调函数------努力学习嵌入式的第十四天!今天的内容让人脑瓜子嗡嗡的 着重复习

总结 1.快速排序 注意&#xff1a; 第二三步并不能反过来 要想降序排列只需要加将比较的符号换一下 2.指针操作一维字符型数组 &#xff08;const&#xff09; char *s "hello"; *sH; //错误 char s[]"hello"; s[0] B char *strncpy(char *d…

05 SB3之Spring Initializr+运行方式+自动配置原理(TBD)

1. 使用IDEA内置Spring Initializr 生成SB项目 最上方Server URL可以选择借助哪个平台生成, 可选阿里云 作为对比 , 官方可选版本最旧为3.1.18 ; 阿里云可选最新版本为3.0.2 本次选择3.1.8版本, 并且添加Spring Web依赖(包括RESTful / Spring MVC/)和Lombok依赖 生成后端项目…

力扣hot100 单词搜索 深度优先搜索 特殊字符判重

Problem: 79. 单词搜索 Code class Solution{int n, m;char[][] b;String word;int[] dx { 1, 0, -1, 0 };int[] dy { 0, 1, 0, -1 };public boolean exist(char[][] board, String word){b board;this.word word;n b.length;m b[0].length; // 以所有点作为起点来进行…

关于 PostgreSQL,你了解多少

背景 最近因工作原因&#xff0c;了解到了阿里的 hologre&#xff0c;它只支持 psql 协议&#xff0c;用起来跟 mysql 会差很多&#xff0c;也很不习惯。所以就好奇&#xff0c;为啥放着mysql不用&#xff0c;却用 psql 什么是 psql psql 是 开源的关系型数据库管理系统 Pos…

vuex store,mutations,getters,actions

文章目录 1.vuex概述2.构建vuex【多组件数据共享】环境Son1.vueSon2.vueApp.vue 3.创建一个空仓库4.如何提供&访问vuex的数据①核心概念 - state状态1.通过store直接访问2.通过辅助函数简化代码 ②核心概念 - mutations&#xff08;粗略&#xff09; 5.核心概念 - mutation…

vue3之echarts3D环柱饼图

vue3之echarts3D环柱饼图 效果&#xff1a; 版本 "echarts": "^5.4.1", "echarts-gl": "^2.0.9" 核心代码&#xff1a; <template><div class"content"><div ref"eCharts" class"chart&…

【Docker】linux、nginx、容器镜像三者基本概念

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

【数据结构 04】单链表

一、链表简介 链表是一种物理存储结构上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表在结构上的分类&#xff1a; 1. 带头结点或无头结点 2. 单向或双向 3. 循环或非循环 虽然链表有多种结构类型&#xff0c;但是我么在实际开发中…

算法设计与分析实验:并查集与生成树

目录 一、情侣牵手 1.1 采用并查集的思想 1.2 采用动态规划的思想 二、账户合并 2.1 具体思路 2.2 思路呈现 2.3 代码实现 2.4 复杂度分析 三、连接所有点的最小费用 3.1 思路一&#xff1a;最小生成树 3.2 思路二&#xff1a;并查集 鸡汤 一、情侣牵手 力扣第765…

Django模型(五)

一、数据的条件查询 参考文档:QuerySet API 参考 | Django 文档 | Django 1.1、常用检索字段 字段检索,是在字段名后加 __ 双下划线,再加关键字,类似 SQL 语句中的 where 后面的部分, 如: 字段名__关键字 exact :判断是否等于value,一般不使用,而直接使用 =contai…

数据与资源可视化——长安链运维监控实践

前言 “链上的交易总量是多少”&#xff0c;“我的链上现在有多少区块了”&#xff0c;“节点是否存活无法第一时间感知到”&#xff0c;除sdk查询链上的相关信息外&#xff0c;今天我们介绍一种新的方式实现链上数据与相关资源的可视化的监控。 简介 监控链上数据以及链上节…