2 fastAPI请求参数

1. 路径参数 (Path Parameters)

路径参数是 URL 路径的一部分,通常用于标识资源的唯一性。路径参数在 FastAPI 中通过在路由装饰器中使用大括号 {} 来定义。

获取路径参数的方式
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}
示例请求:
  • 请求路径:GET /items/42
  • 返回:{"item_id": 42}

在上面的例子中,item_id 是路径参数,FastAPI 会自动将它解析为函数参数 item_id


2. 查询参数 (Query Parameters)

查询参数通过 URL 的查询字符串部分传递,例如 ?key=value。查询参数通常用于过滤、分页等操作。FastAPI 会自动解析查询参数,并将它们传递给视图函数。

获取查询参数的方式
from fastapi import FastAPI

app = FastAPI()

@app.get("/items")
def read_items(skip: int = 0, limit: int = 10):
    return {"skip": skip, "limit": limit}
示例请求:
  • 请求路径:GET /items?skip=10&limit=20
  • 返回:{"skip": 10, "limit": 20}

在这个例子中,skiplimit 是查询参数。FastAPI 会自动将它们映射到函数参数,并提供默认值。


3. 请求体参数 (Request Body)

请求体参数用于 POST、PUT、PATCH 请求中,客户端将数据以 JSON 格式或其他格式(如表单数据)发送到服务器。FastAPI 使用 Pydantic 模型来自动验证和解析请求体的数据。

获取请求体参数的方式
from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    description: str = None

app = FastAPI()

@app.post("/items/")
def create_item(item: Item):
    return {"name": item.name, "price": item.price}
示例请求:
  • 请求路径:POST /items/
  • 请求体(JSON 格式):
{
  "name": "Laptop",
  "price": 1200.50
}
  • 返回:{"name": "Laptop", "price": 1200.5}

在上面的例子中,item 是一个请求体参数,FastAPI 会将请求体中的 JSON 数据自动解析为 Item 类的实例。


4. 请求头 (Request Headers)

请求头包含了有关请求的额外信息,例如认证信息、用户代理、内容类型等。FastAPI 可以通过 Request 对象或直接使用 Header 来获取请求头中的数据。

获取请求头的方式
from fastapi import FastAPI, Header

app = FastAPI()

@app.get("/items/")
def read_items(user_agent: str = Header(None)):
    return {"User-Agent": user_agent}
示例请求:
  • 请求路径:GET /items/
  • 请求头:User-Agent: Mozilla/5.0
  • 返回:{"User-Agent": "Mozilla/5.0"}

在这个例子中,user_agent 是请求头中的 User-Agent,FastAPI 使用 Header 函数从请求头中提取该值。


5. 请求 Cookies (Cookies)

FastAPI 可以从请求的 cookies 中获取信息。如果你想从用户的 cookies 中获取值,可以使用 Cookie 函数。

获取请求 cookies 的方式
from fastapi import FastAPI, Cookie

app = FastAPI()

@app.get("/items/")
def read_items(session_id: str = Cookie(None)):
    return {"session_id": session_id}
示例请求:
  • 请求路径:GET /items/
  • 请求头:Cookie: session_id=12345
  • 返回:{"session_id": "12345"}

在这个例子中,session_id 是从 cookies 中提取的值。


6. 文件上传 (File Upload)

FastAPI 支持文件上传,可以通过 FileUploadFile 类来处理文件上传。UploadFile 提供了更高效的文件处理功能,可以异步读取文件内容。

获取文件上传的方式
from fastapi import FastAPI, File, UploadFile

app = FastAPI()

@app.post("/uploadfile/")
async def upload_file(file: UploadFile = File(...)):
    return {"filename": file.filename}
示例请求:
  • 请求路径:POST /uploadfile/
  • 请求体:上传的文件
  • 返回:{"filename": "example.txt"}

在这个例子中,file 是一个上传的文件,FastAPI 自动处理文件的上传,并通过 UploadFile 提供对文件的异步访问。


7. 查询参数、路径参数、请求体参数的混合使用

FastAPI 允许在同一路由中混合使用路径参数、查询参数和请求体参数。FastAPI 会根据请求自动将数据映射到函数参数。

示例:
from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float

app = FastAPI()

@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item, discount: float = 0):
    return {"item_id": item_id, "name": item.name, "price": item.price, "discount": discount}
示例请求:
  • 请求路径:PUT /items/42?discount=10
  • 请求体(JSON 格式):
{
  "name": "Laptop",
  "price": 1200.50
}
  • 返回:{"item_id": 42, "name": "Laptop", "price": 1200.5, "discount": 10}

在这个例子中,item_id 是路径参数,item 是请求体参数,discount 是查询参数。

FastAPI 提供了多种灵活的方式来获取请求中的参数,包括:

  • 路径参数:通过 URL 路径部分传递,常用于标识资源。
  • 查询参数:通过 URL 查询字符串传递,适用于过滤、排序等操作。
  • 请求体参数:通过 POST、PUT、PATCH 请求的请求体传递,通常使用 Pydantic 模型进行验证。
  • 请求头:通过 Header 获取 HTTP 请求头中的数据。
  • 请求 Cookies:通过 Cookie 获取请求中的 cookies。
  • 文件上传:通过 FileUploadFile 处理文件上传。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值