fastapi 参数
FastAPI 参数
FastAPI 是一个现代的 Web 框架,它使用了许多 Python 最新的语言特性和技术,因此也推荐在 Python 3.7+ 环境下使用。FastAPI 可以轻松地创建高性能、易于维护的 Web API,使 Web 开发更加快速和高效。python请求并解析json数据
在 FastAPI 中,常常需要获取客户端传来的参数,以此来决定 API 函数的行为。FastAPI 提供了多种获取这些参数的方式,本文将一一介绍。
路径参数
路径参数,即 URL 中包含的参数,可以通过在路径中使用花括号 {} 来定义。例如,下面的路径包含了一个名为 item_id 的路径参数:
``` @("/items/{item_id}") async def read_item(item_id: int): return {"item_id": item_id} ```css设置border不显示
当客户端请求路径 /items/25 时,FastAPI 会自动将 25 转换成 int 类型,并将其赋值给 item_id。c语言bool是什么意思
路径参数支持多种类型,例如:
- str: 字符串,路径参数默认的数据类型。 - int, float, Decimal: 数值类型。 - bool: 布尔类型,可以接收 True、true、False、false、1、0。 - UUID: UUID 类型,例如:`UUID("6b9a6e67-a2f2-4aad-b2cc-8a67b08d0a55")`。 - Path: 路径类型,用于接收一个路径字符串。在路径参数后使用 `Path()` 可以将它们合并到一起。 - enum.Enum: 枚举类型。
注意,路径参数必须出现在路径中,而不能出现在查询参数中。路径参数是必需的,例如:
``` @("/items/{item_id}") async def read_item(item_id: int): return {"item_id": item_id} ```
而下面这个会报错:
iframe滚动条怎么设置``` @("/items") async def read_items(item_id: int): return {"item_id": item_id} ```
查询参数
查询参数,即 URL 中通过 ? 拼接的参数,可以通过使用 FastAPI 内置的 `Query` 类来进行定义。例如,下列代码定义了一个名为 q 的查询参数:
``` @("/items/") async def read_items(q: str = None): if q: return {"items": q} return {"items": "all"} ```
上面的代码中,q 的默认值为 None,当接收到 q 的值时,会返回匹配到的结果;当 q 的值为 None 时,返回所有的 items。
生成器`Query` 类接受多个参数:
- `default`: 参数的默认值,如果不传的话,它将是 `None`。 - `title`: 参数的标题,用于将参数名美化。如果未传,则标题将是参数名本身。 - `description`: 参数的文本描述。 - `min_length`: 参数的最小长度。 - `max_length`: 参数的最大长度。 - `ge`: 参数的最小值(
greater than or equal)。 - `le`: 参数的最大值(less than or equal)。 - `gt`: 参数的最小值(greater than)。 - `lt`: 参数的最大值(less than)。 - `regex`: 参数应匹配的正则表达式。 - `alias`: 参数名的别名。如果设置了别名,那么 FastAPI 将使用别名作为参数名。
请求体
有时候我们需要通过请求体发送数据,例如 JSON 数据或者表单数据。这些数据可以通过 FastAPI 内置的 `Body` 类获取。
默认情况下,FastAPI 支持使用 JSON 输入和输出,数据格式通过 Python 的 `dict` 结构来呈现。因此,当POST或PUT请求到达时,FastAPI 将自动解析数据并将其返回到函数中。
例如,下面的代码定义了一个名为 `create_item` 的 POST 请求,它通过请求体传递一个 JSON:
``` from typing import Optional from pydantic import BaseModel
class Item(BaseModel): name: str price: float is_offer: Optional[bool] = None
@app.post("/items/") async def create_item(item: Item): item_dict = item.dict() if item.is_offer: item_dict.update({"item_id": 1}) return item_dict ```付费视频小程序
上面代码中的 `Item` 类用于定义请求体的结构,`name` 和 `price` 是必需的,`is_offer` 可选。如果 `is_offer` 的值为 True,则将添加一个 `item_id` 到返回的 JSON 中。
请求体的结构还可以嵌套,例如:
``` class Item(BaseModel): name: str price: float
class User(BaseModel): name: str age: int
class Order(BaseModel): item: Item user: User
@app.post("/orders/") async def create_order(order: Order): return order ```
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论