requests上传文件,又要上传data的处理

前话

最近在自己学着弄接口自动化框架,因为要封装一个发送请求的父类,其中有考虑到上传文件,以及同时上传文件,和传递其他字段数据,遇到点小问题 这里解决下。

实例的接口数据

参考文档
来自fastapi官方文档上传文件实例:https://fastapi.tiangolo.com/zh/tutorial/request-files/
https://www.cnblogs.com/sanduzxcvbnm/p/12781125.html

#!/usr/bin/env/python3
# -*- coding:utf-8 -*-
"""
@project: Api
@author: zy7y
@file: fapi.py
@ide: PyCharm
@time: 2020/8/1
"""

from fastapi import FastAPI, File, UploadFile, Form

app = FastAPI()


@app.post("/uploadfile/")
async def create_upload_file(file_excel: UploadFile = File(...), username: str = Form(...)):
    # 读取文件
    contents = await file_excel.read()
    # 保存本地
    with open(file_excel.filename, "wb") as f:
        f.write(contents)
    return {'msg': '操作成功', "filename": file_excel.filename, 'username': username}


if __name__ == '__main__':
    import uvicorn
    uvicorn.run('fapi:app', reload=True)

运行这个文件:可以通过http://127.0.0.1:8000/docs查看接口文档

Snipaste_2020-08-01_18-59-29.png

  • 请求路径:/uploadfile/
  • 请求方法:post
  • 请求参数
参数名 参数说明 备注
file_excel 文件二进制对象 不能为空
username 用户名 不能为空
  • 响应参数
参数名 参数说明 备注
msg 操作结果
filename 文件名称
username 用户名
  • 响应数据
{
  "msg": "操作成功",
  "filename": "Python自动化开发实战.pdf",
  "username": "柒意"
}

使用Request请求该接口

#!/usr/bin/env/python3
# -*- coding:utf-8 -*-
"""
@project: apiAutoTest
@author: zy7y
@file: request_demo.py
@ide: PyCharm
@time: 2020/8/1
"""

import requests

# 上传文件接口
url = 'http://127.0.0.1:8000/uploadfile/'
# 上传非文件的参数数据
data = {
    "username": "柒意",
}
# 上传文件类型的参数数据, 下面的 'file_excel' 是上面接口中对应的请求参数里的文件对象中的参数名,
file = {'file_excel': open('../data/case_data.xlsx', 'rb')}

res = requests.post(url, data, files=file)
print(res.json())

结果:

/Users/zy7y/PycharmProjects/apiAutoTest/venv/bin/python /Users/zy7y/PycharmProjects/apiAutoTest/tools/demo.py
{'msg': '操作成功', 'filename': 'case_data.xlsx', 'username': '柒意'}

Process finished with exit code 0

⚠️注意:file_excel是接口请求参数中,接受文件对象的参数名

posted @ 2020-08-01 19:05  zy7y  阅读(1082)  评论(0编辑  收藏  举报