学习使用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博客

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

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

相关文章

免费使用支持离线部署使用的 txt2video 文本生成视频大模型(Text-to-Video-Synthesis Model)

免费使用支持离线部署使用的 txt2video 文本生成视频大模型(Text-to-Video-Synthesis Model)。 文本生成视频大模型(Text-to-Video-Synthesis Model)是一种基于深度学习技术的人工智能模型&#xff0c;它可以将自然语言文本描述转换为相应的视频。即通过输入文本描述&#xff…

MySQL 函数参考手册(MySQL 数值函数)

目录 MySQL ABS() 函数 MySQL ACOS() 函数 MySQL ASIN() 函数 MySQL ATAN() 函数 MySQL ATAN2() 函数 MySQL AVG() 函数 MySQL CEIL() 函数 MySQL CEILING() 函数 MySQL COS() 函数 MySQL COT() 函数 MySQL COUNT() 函数 MySQL DEGREES() 函数 MySQL DIV 函数 My…

远程连接服务器:Ping通但SSH连接失败的解决办法

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言常见问题影响SSH的因素本地影响因素防火墙设置网络配置文件 远程主机影响因素放行…

HTML5画布绘制实心圆、三角形、五边形、五角星

场景 纯原生canvas绘制&#xff0c;可以自定义位置、颜色等信息。 实现 以下封装成方法&#xff0c;调用后传参即可。图形两角间边距暂时写死&#xff0c;可以自行加减参数来调整。 1.实心圆 function circular(x, y, radius, fillColor, strokeColor){ ctx.beginPath();//开始…

Python爬虫实践指南:利用cpr库爬取技巧

引言 在信息时代&#xff0c;数据是无价之宝。为了获取网络上的丰富数据&#xff0c;网络爬虫成为了不可或缺的工具。在Python这个强大的编程语言中&#xff0c;cpr库崭露头角&#xff0c;为网络爬虫提供了便捷而高效的解决方案。本文将深入探讨如何利用cpr库实现数据爬取的各…

西瓜书读书笔记整理(十二) —— 第十二章 计算学习理论(下)

第十二章 计算学习理论&#xff08;下&#xff09; 12.4 VC 维&#xff08;Vapnik-Chervonenkis dimension&#xff09;12.4.1 什么是 VC 维12.4.2 增长函数&#xff08;growth function&#xff09;、对分&#xff08;dichotomy&#xff09;和打散&#xff08;shattering&…

macOS 上使用 Sublime Text 删除全部空行

1、删除方法 1、打开搜索替换: 使用快捷键Command F打开查找功能。然后点击左下角的.*图标或使用快捷键Command Alt R来启用正则表达式搜索。 2、输入正则表达式: 在查找栏中输入以下正则表达式&#xff1a;^\s*\n 这个正则表达式匹配从行开始到行结束之间的所有空白字符…

扩展学习|商业智能和大数据分析的研究前景(比对分析)

文献来源&#xff1a; Liang T P , Liu Y H .Research Landscape of Business Intelligence and Big Data analytics: A bibliometrics study[J].Expert Systems with Applications, 2018, 111(NOV.):2-10.DOI:10.1016/j.eswa.2018.05.018. 信息和通信技术的快速发展导致了数字…

RocksDB是如何实现存算分离的

核心参考文献&#xff1a; Dong, S., P, S. S., Pan, S., Ananthabhotla, A., Ekambaram, D., Sharma, A., Dayal, S., Parikh, N. V., Jin, Y., Kim, A., Patil, S., Zhuang, J., Dunster, S., Mahajan, A., Chelluri, A., Datye, C., Santana, L. V., Garg, N., & Gawde,…

YOLOv5独家改进:轻量级原创自研 | 一种多尺度的GSConv卷积变体,轻量化的同时能够实现涨点 | 新颖的轻量级网络

💡💡💡本文独家改进:1)基于GSConv提出了一种Multi-Scale Ghost Conv的卷积变体,保证轻量级的同时实现涨点,2)同时结合Bottleneck,设计了一种新颖的轻量级网络。 💡💡💡在多个数据集验证能够涨点,同时跟yolov5s进行参数量对比: parameters、GFLOPs都有大幅…

乐鑫与 Elektor 杂志合作推出特刊,聚焦 AIoT 创新

在新一年的起始之际&#xff0c;我们很荣幸地与 Elektor 合作推出由乐鑫领衔编辑的杂志特刊。欢迎点此阅读电子版本。 Elektor 杂志作为国际电子工程和科技创新的重要平台&#xff0c;自 20 世纪 60 年代起&#xff0c;就引领着电子制造的发展潮流。如今&#xff0c;它已经发展…

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(1)

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

如何写好论文——(4)确立研究目标的两个原则

一、市场需求——大处着眼 不管目前自己的能力和资源是多么的有限&#xff0c;也要眼光长远&#xff0c;不要老是局限于眼下&#xff0c;只做一些细枝末节、无足轻重的工作。 二、自身条件——小事着手 着眼于自身目前的实际情况&#xff0c;踏踏实实从小事做起 引言就是把自…

Leetcode—2396. 严格回文的数字【中等】

2024每日刷题&#xff08;一零六&#xff09; Leetcode—2396. 严格回文的数字 算法思想 实现代码 class Solution { public:bool isStrictlyPalindromic(int n) {return false;} };运行结果 之后我会持续更新&#xff0c;如果喜欢我的文章&#xff0c;请记得一键三连哦&…

【linux】文本处理命令-grep、awk、sed使用(1)

作用&#xff1a; grep数据查找定位awk数据切片sed数据修改 类比SQL&#xff1a; grepselect *from tableawkselect field from tablesedupdate table set fieldnew where fieldold 一、grep 1.1 grep* Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟g…

基于simulink的模糊PID控制器建模与仿真,并对比PID控制器

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1PID控制器原理 4.2 模糊PID控制器原理 5.完整工程文件 1.课题概述 在simulink&#xff0c;分别建模实现一个模糊PID控制器和一个PID控制器&#xff0c;然后将PID控制器的控制输出和模糊PID的控制输出…

剑指offer面试题10 二进制中1的个数

考察点 位运算知识点 位运算针对二进制位进行运算&#xff0c;包括(&)与运算,(|)或运算&#xff0c;(^)异或运算,(~)取反,(<<)左 移位,(>>)右移位,(>>>)无符号右移运算 与运算&#xff1a;0&00,0&10,1&00,1&11 或运算&#xff1a;0…

closest的用法

1. closest的概念 Element.closest() 是一个DOM&#xff08;文档对象模型&#xff09;方法&#xff0c;用于从当前元素开始&#xff0c;沿着DOM树向上遍历&#xff0c;直到找到匹配指定选择器的第一个元素。如果没有找到匹配的元素&#xff0c;则返回 null。 2. closest的使用…

【vue2】路由之 Vue Router

文章目录 一、安装二、基础使用1、简单的示例2、动态路由2.1 定义动态路径参数2.2 获取动态路径的参数2.3 捕获所有路由 3、嵌套路由4、编程式的导航4.1 router.push4.2 router.replace4.3 router.go(n) 5、命名路由6、重定向 三、进阶1、导航守卫1.1 全局前置守卫1.2 全局后置…

模板笔记 ST表 区间选数k

本题链接&#xff1a;用户登录 题目&#xff1a; 样例&#xff1a; 输入 5 3 1 1 2 2 3 1 2 3 3 1 5 输出 4 6 思路&#xff1a; . 根据题意&#xff0c;给出数组&#xff0c;以及多个区间&#xff0c;问这些区间中&#xff0c;最小值之和 和 最大值之和&#xff0c;…