fastapi参数基础
fastapi中Optional的含义
在 FastAPI 中,Optional 是 Python 的类型提示的一部分,通常用于函数参数和返回值的类型注解。Optional 表示一个可选的值,即一个参数可以是指定的类型,也可以是 None。
具体来说,Optional[T] 表示参数可以是类型 T 的实例,也可以是 None。这在函数参数和返回值中非常有用,因为它允许你指定一个参数是可选的,可以有值也可以没有值。
例如,假设您有一个 FastAPI 路由函数,接受一个可选的整数作为参数,您可以这样注解:
from fastapi import FastAPI
from typing import Optional
app = FastAPI()
@app.get("/items/")
async def read_item(skip: Optional[int] = None):
if skip is not None:
return {"skip": skip}
return {"message": "No skip parameter provided."}
在上面的示例中,skip 参数被注解为 Optional[int],这意味着它可以是一个整数,也可以是 None。如果客户端请求 /items/ 路由时不提供 skip 参数,函数将返回一个包含消息的 JSON 响应。如果客户端提供了 skip 参数,函数将返回包含 skip 值的 JSON 响应。
使用 Optional 类型提示可以使您的代码更加清晰,同时允许函数参数具有默认值 None,以处理缺少参数的情况。这提高了代码的灵活性和可读性。
fastapi中Query的含义
在 FastAPI 中,Query 是一个用于定义查询参数的装饰器(decorator),它允许你指定请求 URL 中的查询参数,以及相关的验证和文档信息。
Query 装饰器通常用于在路由函数的参数中声明查询参数,以便 FastAPI 可以自动从请求中提取查询参数的值并将其传递给路由函数。它有以下几种用法:
基本用法:
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_item(skip: int = Query(None, description="跳过的项目数")):
return {"skip": skip}
在上面的示例中,skip 是一个查询参数,通过 Query 装饰器注释在路由函数的参数中。它的默认值为 None,这意味着如果客户端没有提供 skip 查询参数,它将为 None。description 参数用于添加文档描述。
指定查询参数的名称:
@app.get("/items/")
async def read_item(skip: int = Query(None, description="跳过的项目数", alias="skip_items")):
return {"skip": skip}
在这个示例中,使用了 alias 参数来指定查询参数的名称。客户端可以使用 skip_items 参数名来提供查询参数值。
指定查询参数的验证规则:
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.get("/items/")
async def read_item(item: Item = Query(..., description="要查询的项目")):
return {"item": item}
在上面的示例中,我们使用了一个 Pydantic 模型类 Item 来定义查询参数的验证规则。如果客户端提供的查询参数不符合模型的规则,FastAPI 将返回一个验证错误。
指定查询参数的默认值和是否必需:
None 表示参数是可选的,如果客户端不提供该参数,将使用默认值为 None。
... 表示参数是必需的,客户端必须提供它。
使用其他默认值,如 skip: int = Query(0),表示如果客户端不提供该参数,将使用默认值 0。
总之,Query 装饰器用于定义查询参数,包括名称、验证规则、默认值等。这些参数不仅用于提取客户端请求中的查询参数,还用于自动生成文档和验证输入数据。这使得 FastAPI 能够快速开发安全且具有文档的 API。