学习使用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.rhkb.cn/news/250380.html

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

相关文章

Java宝典-数据类型

目录 1.变量与常量2.Java中的数据类型3.整型3.1 字节型byte3.2 短整型short3.3 整型int3.4 长整型long 4.浮点型4.1 单精度浮点型float4.2 双精度浮点型double 5.字符型6.布尔型7.类型转换7.1 隐式类型转换7.2 显示类型转换(强制类型转换) 8.类型提升 大家好,我是你们的Vampire…

华为数通方向HCIP-DataCom H12-821题库(单选题:401-420)

第401题 R1的配置如图所示,此时在R1查看FIB表时,关于目的网段192.168.1.0/24的下跳是以下哪一项? A、10.0.23.3 B、10.0.12.2 C、10.0.23.2 D、10.0.12.1 【答案】A 【答案解析】 该题目考查的是路由的递归查询和 RIB 以及 FIB 的关系。在 RIB 中,静态路由写的是什么,下…

PPT录屏功能在哪?一键快速找到它!

在现代办公环境中&#xff0c;ppt的录屏功能日益受到关注&#xff0c;它不仅能帮助我们记录演示文稿的播放过程&#xff0c;还能将操作过程、游戏等内容完美录制下来。可是很多人不知道ppt录屏功能在哪&#xff0c;本文将为您介绍ppt录屏的打开方法&#xff0c;以帮助读者更好地…

网络原理TCP/IP(2)

文章目录 TCP协议确认应答超时重传连接管理断开连接 TCP协议 TCP全称为"传输控制协议(Transmission Control Protocol").⼈如其名,要对数据的传输进⾏⼀个详细 的控制; TCP协议段格式 • 源/目的端口号:表⽰数据是从哪个进程来,到哪个进程去; • 32位序号/32位确认…

spring问题点

1.事务 1.1.事务传播 同一个类中 事务A调非事务B B抛异常 AB事务生效&#xff08;具有传播性&#xff09; 同一个类中 事务A调非事务B A抛异常 AB事务生效 也就是主方法加了事务注解 则方法内调用的其他本类方法无需加事务注解&#xff0c; 发生异常时可以保证事务的回滚 最常…

day07-CSS高级

01-定位 作用&#xff1a;灵活的改变盒子在网页中的位置 实现&#xff1a; 1.定位模式&#xff1a;position 2.边偏移&#xff1a;设置盒子的位置 left right top bottom 相对定位 position: relative 特点&#xff1a; 不脱标&#xff0c;占用自己原来位置 显示模…

跟着cherno手搓游戏引擎【14】封装opengl

本节先把代码粘上&#xff0c;后续会慢慢把注释都给加上&#xff0c;先看代码了解个大概&#xff08;待更新&#xff09; 前置&#xff1a; RendererAPI.h: #pragma once namespace YOTO {enum class RendererAPI {None 0,OpenGL1};class Renderer {public:inline static R…

(每日持续更新)jdk api之NotSerializableException基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

Flink 流式读取 Debezium CDC 数据写入 Hudi 表无法处理 -D / Delete 消息

问题场景是&#xff1a;使用 Kafka Connect 的 Debezium MySQL Source Connector 将 MySQL 的 CDC 数据 &#xff08;Avro 格式&#xff09;接入到 Kafka 之后&#xff0c;通过 Flink 读取并解析这些 CDC 数据&#xff0c;然后以流式方式写入到 Hudi 表中&#xff0c;测试中发现…

【爬虫专区】批量下载PDF (无反爬)

天命&#xff1a;只要没反爬&#xff0c;一切都简单 这次爬取的是绿盟的威胁情报的PDF 先看一下结构&#xff0c;很明显就是一个for循环渲染 burp抓包会发现第二次接口请求 接口请求一次就能获取到了所有的数据 然后一个循环批量下载数据即可&#xff0c;其实没啥难度的 imp…

如何安装MySQL

如何安装MySQL 前提条件下载MySQL在 Windows 上安装 MySQL验证 MySQL 安装 MySQL是当今工业界广泛使用的最流行的关系数据库管理软件之一。它通过各种存储引擎提供多用户访问支持。它得到了甲骨文公司的支持。在本节中&#xff0c;我们将学习如何为初学者下载和安装 MySQL。 前…

安卓相对布局RelativeLayout

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"150dp"><TextViewandroid…

在VM虚拟机搭建NFS服务器

NFS共享要求如下&#xff1a; &#xff08;1&#xff09;共享“/mnt/自已姓名的完整汉语拼音”目录&#xff0c;允许XXX网段的计算机访问该共享目录&#xff0c;可进行读写操作。&#xff08;说明&#xff1a;XXX网段&#xff0c;请根据你的规划&#xff0c;再具体指定&#xf…

完整的 HTTP 请求所经历的步骤及分布式事务解决方案

1. 对分布式事务的了解 分布式事务是企业集成中的一个技术难点&#xff0c;也是每一个分布式系统架构中都会涉及到的一个东西&#xff0c; 特别是在微服务架构中&#xff0c;几乎可以说是无法避免。 首先要搞清楚&#xff1a;ACID、CAP、BASE理论。 ACID 指数据库事务正确执行…

【C语言刷题系列】喝汽水问题

文章目录 一、文章简介 1.先买再换 1.1 代码逻辑&#xff1a; 1.2 完整代码 1.3 运行结果 1.4 根据方法一总结优化 2.边买边换 2.1 代码逻辑&#xff1a; 2.2 完整代码 2.3 运行结果 一、文章简介 本文所述专栏——C语言经典编程问题 C语言刷题_倔强的石头106的博客…

unity3d的海盗王白银城演示

这是一个外网上的下载的海盗王unity3d制作的白银城演示场景。 地图只含有白银城区&#xff0c;没有野外和怪物。 当然也没有服务器端的。 我对灯光、摄像头、天空背景等做过调整&#xff0c;使它显示起来比较鲜丽。 它的模型和贴图是直接拿了海盗的&#xff0c;没有做过优化调整…

【算法与数据结构】139、LeetCode单词拆分

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题可以看做一个动态规划问题。其中&#xff0c;字符串s是背包&#xff0c;而字典中的单词就是物品。…

指针的学习1

目录 什么是指针&#xff1f; 野指针 造成野指针的原因&#xff1a; 如何避免野指针&#xff1f; 内存和指针 如何理解编址&#xff1f; 指针变量和地址 取地址操作符& 指针变量和解引用操作符 指针变量 如何拆解指针类型&#xff1f; 指针变量的大小 指针变量…

麒麟系统—— openKylin 安装 Maven

麒麟系统—— openKylin 安装 Maven 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。2. 确保 java 已经安装完毕 二、下载Maven三、解压 Maven 与环境配置解压配置环境变量验证 最终&#xff1a;介绍配置的其他参数使用 本文将分享如何在麒麟操作系统 openKylin 上安装…

【Spring源码分析】推断构造方法

推断构造方法源码解析 一、确认候选构造——AutowireAnnotationBeanPostProcessor#determineCandidateConstructors二、autowireConstructor 方法源码解析三、总结 阅读此需阅读下面这些博客先【Spring源码分析】Bean的元数据和一些Spring的工具【Spring源码分析】BeanFactory系…