python:Fastapi - 请求表单与文件

本文介绍了FastAPI中处理表单数据和文件上传的方法。表单数据使用Typer进行定义,文件上传分为内存存储和磁盘存储两种方式,适合不同大小的文件。FastAPI支持多文件上传和同时处理表单与文件。文章还提到了相关属性和方法,如file对象的name、content_type等,并指出了使用过程中可能遇到的问题。
摘要由CSDN通过智能技术生成

简单絮叨下,如有问题请私信

上篇文章主要唠了接口响应的一些东西,今天主要是唠Form表单和文件处理。表单可以理解为数据采集,而文件处理就是在获得客户端的文件进行数据返回或者直接上传服务器。

fastapi框架中提供了操作表单的Form和处理文件的File,其参数的方式与 BodyQuery一样。



表单数据

From它接收的不是json,而是表单字段,使用表单需要安装pip install python-multipart(Python 的流式多部分解析器)

from fastapi import Form
from fastapi import FastAPI


app = FastAPI()


@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
    if password == "123456":
        return {"username": username}
    else:
        return "密码或账号不正确..."

注释信息:

  • usernampassword是定义了Form表单
  • 如果password不等于字符串类型的123456,就抛出提示信息,相反就是返回用户名
  • 可在一个路径操作中声明多个 Form 参数
  • 表单数据的「媒体类型」编码一般为 application/x-www-form-urlencoded

启动服务:

PS E:\git_code\python-code\fastapiProject> uvicorn form_main:app --reload

请求接口:

POST http://127.0.0.1:8000/login/

请求参数:

  • 所以在postman中的body-选择form-datax-www-form-urlencoded进行传参
KEY VALUE
username zhangsan
password 123456

请求结果:

{
    "username": "zhangsan"
}


请求文件

文件上传也是以表单的形式发送的,它默认的媒体类型编码一般为 application/form-data

因为是以表单的形式发送数据,固要安装pip install python-multipart(Python 的流式多部分解析器)

文件上传分为两种形式,首先是直接File,其次是UploadFile,它俩的区别就是UploadFile是处理大数据,相反的就是适用于小型文件

from fastapi import File
from fastapi import FastAPI
from fastapi import UploadFile


app = FastAPI()


@app.post("/file/")
async def create_file(file: bytes= File(...)):
    """
    直接定义`File`参数
    :param file:
    :return:
    """
    return {"file": file}


@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
    "&
Python中,你可以使用FastAPI作为Web框架,配合Flask-SocketIO实现实时交互,将Excel表格数据展示在HTML页面上,并通过前端事件处理如AJAX来实现在浏览器端的编辑和保存功能。这里我们简要概述步骤: 1. **安装所需库**: - `fastapi` - `uvicorn` (FastAPI的服务器) - `flask-sqlalchemy` 或 `pandas` (用于读取和操作Excel) - `jinja2` (模板引擎,用于渲染HTML) - `python-multipart` (处理POST请求中的文件) ```bash pip install fastapi uvicorn flask-sqlalchemy jinja2 python-multipart openpyxl ``` 2. **读取Excel并存储数据**: 使用`openpyxl`库加载Excel数据: ```python from fastapi import FastAPI import pandas as pd app = FastAPI() async def load_excel(file): df = pd.read_excel(file, sheet_name="Sheet1") return df ``` 3. **创建HTML模板**: 使用Jinja2创建一个可以编辑的表格模板: ```html <template> <form id="edit-form"> <table> {{ for row in data }} <tr> <!-- 这里遍历DataFrame中的每一行 --> <td contenteditable>{{ row['Column1'] }}</td> <!-- 请替换为实际列名 --> <!-- 添加更多单元格 --> </tr> {{ endfor }} </table> <button type="submit">Save</button> </form> </template> ``` 4. **处理前端提交**: 使用Flask-SocketIO监听表单提交事件,在客户端编辑数据后发送到服务器,服务器更新数据库(假设使用SQLAlchemy): ```python from fastapi.responses import HTMLResponse from flask_socketio import SocketIO socket_io = SocketIO(app) @app.post("/save/") async def save_excel(request: UploadFile = File(...)): # 读取用户输入并更新数据 ... # 更新数据库或其他持久化层 ... return HTMLResponse(content=jinja2.Template(html_template).render(data=df), status_code=200) ``` 5. **运行服务**: 启动FastAPI和SocketIO服务器: ```bash uvicorn main:app --reload python -m socketio.run your_flask_sockets_app ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值