FastAPI(54)- 详解 Request 请求对象(下)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: FastAPI(54)- 详解 Request 请求对象(下)

获取表单数据


@app.post("/form")
async def get_form(*,
                   username: str = Form(...),
                   oassword: str = Form(...),
                   request: Request):
    res = {
        # 获取表单数据
        "form": await request.form()
    }
    return res


请求结果

{

 "form": {

   "username": "name",

   "oassword": "***"

 }

}

 

获取 Request Body


class Item(BaseModel):
    id: str
    title: str
@app.post("/body")
async def get_body(item: Item, request: Request):
    res = {
        # 获取 Request Body
        "body": await request.json(),
        "body_bytes": await request.body()
    }
    return res


请求结果

{
  "body": {
    "id": "string",
    "title": "string"
  },
  "body_bytes": "{\n  \"id\": \"string\",\n  \"title\": \"string\"\n}"
}


.body() 返回值类型是 bytes

 

获取 Request 存储的附加信息


async def dep_state(request: Request):
    # 给 request 存储附加数据
    request.state.db = "Mysql+pymysql//username"
@app.post("/state/", dependencies=[Depends(dep_state)])
async def get_state(request: Request):
    res = {
        "state": request.state,
        "db": request.state.db
    }
    return res


请求结果

{
  "state": {
    "_state": {
      "db": "Mysql+pymysql//username"
    }
  },
  "db": "Mysql+pymysql//username"
}


获取文件上传信息


from fastapi import UploadFile, File, Form
@app.post("/file")
async def get_file(*,
                   file: UploadFile = File(...),
                   name: str = Form(...),
                   request: Request):
    form_data = await  request.form()
    res = {
        # 表单数据
        "form": form_data,
        # 文件对象 UploadFile
        "file": form_data.get("file"),
        # 文件名
        "filename": form_data.get("file").filename,
        # 文件类型
        "content_type": form_data.get("file").content_type,
        # 文件内容
        "file_content": await form_data.get("file").read()
    }
    return res


请求结果

{
  "form": {
    "file": {
      "filename": "test.txt",
      "content_type": "text/plain",
      "file": {}
    },
    "name": "表单name!!"
  },
  "file": {
    "filename": "test.txt",
    "content_type": "text/plain",
    "file": {}
  },
  "filename": "test.txt",
  "content_type": "text/plain",
  "file_content": "hello world"
}


UploadFile 对象

  • form_data.get("file") 返回的是一个 starlette.datastructures.UploadFile 对象
  • filename、content_type 是对象实例属性
  • .read() 是实例方法,读取文件

 

UploadFile 的其他异步方法

和 Python 普通的文件对象方法一样,只不过都是 async 异步的

  • write
  • read
  • seek
  • close


image.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
FastAPI(54)- 详解 Request 请求对象(上)
FastAPI(54)- 详解 Request 请求对象(上)
615 0
|
6月前
|
IDE 测试技术 开发工具
FastAPI 并发请求解析:提高性能的重要特性
在当今的数字化世界中,网络用户对于高速响应和持续连接的诉求日益显著。这促使了基于 Python 构建的 FastAPI 框架受到广泛关注,它不仅现代化且效率极高,而且简化了并行请求的处理。本篇文章旨在探讨 FastAPI 如何处理这类请求,并对应用实例进行实际编码展示。
|
JSON IDE API
FastAPI(8)- 请求体 Request Body (下)
FastAPI(8)- 请求体 Request Body (下)
290 0
FastAPI(8)- 请求体 Request Body (下)
|
网络安全 Windows
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
|
存储 SQL 前端开发
FastAPI第三天---文件请求
FastAPI第三天---文件请求
208 0
FastAPI第三天---文件请求
|
前端开发 中间件 测试技术
FastApi的请求拦截
FastApi的请求拦截
875 0
FastAPI(15)- 声明请求示例数据(下)
FastAPI(15)- 声明请求示例数据(下)
215 0
FastAPI(15)- 声明请求示例数据(下)
|
JSON API 数据格式
FastAPI(15)- 声明请求示例数据(上)
FastAPI(15)- 声明请求示例数据(上)
210 0
FastAPI(15)- 声明请求示例数据(上)
|
JSON API 数据格式
FastAPI(8)- 请求体 Request Body (上)
FastAPI(8)- 请求体 Request Body (上)
694 0
FastAPI(8)- 请求体 Request Body (上)
|
NoSQL 测试技术 Redis
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)