API接口简单使用(二):Python中使用Flask(接口封装整理版,含文件上传接口的详细实现)
本文对Python中使用Flask封装网络接口的几种情况进行了整理,并进行了详细的文件上传API接口的实现。可以使用HTML/Postman的方式进行文件参数的上传,测试网络接口获取上传文件的类型。
一、概述
记录时间 [2024-4-3]
在上文中,我们细致地进行了API
接口的简单使用:在Python
中使用Flask
封装网络接口,可以通过调用API
接口,实现请求参数的上传,以及自定义文本/JSON
格式/图片等的返回。
感兴趣的朋友可以参考这篇文章:API接口简单使用(一):Python中使用Flask封装网络接口
由于上文中的操作过程较为详细,文章篇幅较长,虽然便于初次操作,但熟练之后就会显得相对冗余。为了解决这个问题,本文将对这些接口封装做一个简单的整理,期待其能作为一份工具文档而发挥作用。
此外,文章中进行了详细的文件上传API
接口的实现,想要了解这一部分的朋友可以直接查看文章的后半部分。
二、Flask实例:网络接口初尝试
在flaskTest.py
中编写一个简单的测试实例,然后尝试运行。
# Flask是使用Flask框架需要导入的依赖
from flask import Flask
# app是Flask构建的实例
app = Flask(__name__)
# @app.route('/')
# 这里定义了HTTP请求的方式,如 GET/POST... 默认为GET请求
# 我们也可以自定义请求方式,如 @app.post('/')
# ('/')中 / 代表请求的URL路径,此时浏览器中访问路径为 127.0.0.1:5000
# ('/hello') 此时浏览器中访问路径为 127.0.0.1:5000/hello
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
# def为python中定义的函数
# hello_world()是函数名
# return后面的即为HTTP请求返回的结果
if __name__ == '__main__':
app.run()
# app.run() 运行这个实例
# 默认本机访问,默认5000端口
# 我们可以进行自定义
# 如 app.run(host='0.0.0.0', port=5001)
# '0.0.0.0'表示允许全部主机访问,port=5001 指定端口为5001
查看反馈,可以看出项目运行在主机的5000
端口
打开浏览器,访问127.0.0.1:5000
这个URL
时,就会得到程序返回的Hello World!
# 可以看出项目运行在主机的5000端口
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Serving Flask app 'flaskTest'
* Debug mode: off
三、HTML方式测试接口
当然我们可以使用浏览器直接测试,或者使用测试工具
Postman
等等。
1. 简单示例
写一个简单的HTML
文件来发送HTTP
请求。
<html>
<head>
<title>HTTP请求测试</title>
</head>
<body>
<!--action中写入请求的URL-->
<!--method中写入请求的方法,如 get/post...-->
<form action="http://127.0.0.1:5000" method="get" enctype="multipart/form-data">
<input type="submit" value="测试">
</form>
</body>
</html>
2. 上传文件版本
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="http://127.0.0.1:5000/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
四、网络接口封装整理
1. 网络接口:请求参数传递
在发送
HTTP
请求时带上参数,并将自定义的参数返回给客户端。
编写接口:
# 在flaskTest.py中编写一个新的函数
@app.route('/text/<id>')
def text(id):
return "hello %s" % id
在浏览器中测试:按下F12
键(部分电脑可能是FN+F12
)调出开发工具
输入网址,输入的格式:
ip地址:端口号/请求路径/待传参数
http://127.0.0.1:5000/text/test
2. 网络接口:JSON格式数据返回
需要依赖:
from flask import Flask,jsonify
编写接口:
# json数据返回接口
@app.route('/json')
def return_json():
data = [{'msg':'This is a json TEST'},{'msg1':'This is a json TEST111'}]
return jsonify(data)
运行,然后进行请求测试(浏览器/Postman
均可):
http://127.0.0.1:5000/json
3. 网络接口:图片形式返回
需要依赖:
from flask import Flask,send_file
编写接口:
# 图片返回接口
@app.route('/image')
def return_image():
image_path = 'yfx.jpg'
return send_file(image_path, mimetype='image/jpeg')
# image_path 代表图片资源的存放路径
# yfx.jpg 和 flaskImage.py文件 存放在同一级目录中
运行,然后进行请求测试(浏览器/Postman
均可):
http://127.0.0.1:5000/image
五、实现文件上传接口
接下来进行文件上传
API
接口的实现,在PyCharm
中进行。
1. 整理思路
首先我们来整理一下思路,要实现通过接口上传文件,那么有以下几点是必须要完成的:
- 在客户端(发送请求端),文件作为参数进行传递
- 在服务端(处理请求并返回结果),能接收到客户端上传的文件
- 服务端起码要知道这个文件是什么类型的
- 服务端能对这个文件进行各种操作(这也是后续完成
YOLOv8
模型接口封装的关键一步)
2. 获取文件类型
创建flaskUpload.py
文件,编写Flask
实例:
from flask import Flask, request
app = Flask(__name__)
@app.route('/...')
def hanshu():
# 这里是写接口函数的地方
if __name__ == '__main__':
app.run()
编写函数,实现文件上传,然后获取文件类型并返回
@app.post('/upload')
def upload():
# 文件作为参数传递,其 id为 file
# 如果没有接收到这个请求,返回 No file part
if 'file' not in request.files:
return "No file part"
# 获取上传的文件
file = request.files['file']
# 获取文件名
if file.filename == '':
return "No selected file"
# file_format 获取文件类型,并返回
if file:
filename = file.filename
file_format = filename.rsplit('.', 1)[1]
return "File format is: " + file_format.upper()
3. 接口测试
可以使用上文提供的
HTML
方式上传文件版本进行测试,这里再介绍下Postman
方式。
打开Postman
,可以通过Postman
官网,进行下载。
选择POST
方法,输入URL
:
http://127.0.0.1:5000/upload
然后,重要的一步,传递参数的格式请选择form-data
,具体的操作步骤是:选择Body
,再选择form-data
,Key
中填入我们刚刚设置好的file
,右边选择上传参数类型为File
即可。
注意:Key
中填入的id
一定要和后端接口中设置的名称一致,否则后端就无法获取文件!
Value
中就可以选择文件上传,文中上传了一个html
类型的文件进行测试。准备完毕后点击Send
,即可得到接口返回的结果File format is: HTML
,如图所示。
六、总结
本文对Python
中使用Flask
封装网络接口的几种情况进行了整理,并进行了详细的文件上传API
接口的实现。通过此,我们可以使用HTML
/Postman
的方式进行文件参数的上传,以及测试网络接口获取上传文件的类型。
一些参考资料
API
接口简单使用(一):https://blog.csdn.net/Sareur_1879/article/details/137270958
Flask
官方文档:https://dormousehole.readthedocs.io/en/latest/quickstart.html
Postman
官网:https://www.postman.com/
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)