💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
- 导航
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
一.post 请求
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,它基于 Python 3.6+ 类型提示。FastAPI 支持使用 Pydantic 进行数据验证,这意味着你可以定义请求和响应的数据模型,FastAPI 会自动为你生成请求的验证和响应的序列化。
在 FastAPI 中,处理数组参数的 POST 请求是一个常见的需求,尤其是在需要接收大量数据或批量操作的场景中。下面我们将详细探讨如何使用 FastAPI 来实现这一功能。
1. 定义数据模型
首先,我们需要定义一个数据模型来表示 POST 请求中的数组参数。这可以通过 Pydantic 模型来实现。
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
class ItemsList(BaseModel):
items: List[Item]
在这个例子中,Item
是一个基本的数据模型,包含 name
和 description
两个字段。ItemsList
模型包含一个 items
字段,它是一个 Item
类型的列表。
2. 创建 API 路由
接下来,我们需要创建一个 API 路由来处理 POST 请求。在 FastAPI 中,你可以使用 @app.post
装饰器来定义一个 POST 路由。
from fastapi import FastAPI, HTTPException
from typing import List
app = FastAPI()
@app.post("/items/")
async def create_items(items_list: ItemsList):
items = items_list.items
# 这里可以添加逻辑来处理接收到的数组数据
return {"message": "Items received", "items": items}
在这个例子中,我们定义了一个 /items/
路由,它接收一个 ItemsList
类型的请求体。create_items
函数将异步处理请求,并返回接收到的数组数据。
3. 处理数组数据
在 create_items
函数中,你可以添加任何你需要的逻辑来处理数组数据。例如,你可能需要将这些数据存储到数据库中,或者进行一些计算和验证。
4. 启动和测试 API
一旦你定义了路由和数据模型,你可以启动 FastAPI 应用并使用工具如 Postman 或 curl 来测试你的 API。
uvicorn main:app --reload
使用 curl 测试 POST 请求:
curl -X 'POST' \
'http://127.0.0.1:8000/items/' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"items": [
{
"name": "Item 1",
"description": "Description of Item 1"
},
{
"name": "Item 2"
}
]
}'
5. 异常处理
在处理 POST 请求时,异常处理是非常重要的。FastAPI 允许你使用 HTTPException 来抛出自定义的异常。
@app.post("/items/")
async def create_items(items_list: ItemsList):
try:
items = items_list.items
# 模拟异常情况
raise ValueError("An error occurred")
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
return {"message": "Items received", "items": items}
二.实现步骤
1.客户端
def voc_list(app_id: str, words: List[str]):
try:
# 指定请求参数
url: str = f"{api_base}/voc/list"
data = {
"app_id": app_id,
"words": words
}
headers = {
'accept': 'application/json',
'Content-Type': 'application/json'
}
response = requests.post(url, data=json.dumps(data), headers=headers)
# 检查响应状态码
if response.status_code == 200:
# 请求成功
logger.info(f'voc list ok.:{response}')
return response.text
else:
# 请求失败
logger.error(f'voc list fail:{response}')
except Exception as e:
logger.error(f'voc list exception:{e}')
2.请求参数
class VocListRequest(BaseModel):
app_id: str
words: List[str]
3.服务端
@staticmethod
@AppRouter.post("/voc/list", summary="查询", description="查询")
async def voc_list(voc_list: VocListRequest):
app_id = voc_list.app_id
words = voc_list.words
app = await AppManager().get_app_info(app_id)
res = {}
if app:
vocab_table_ids = app.vocab_table_info
if vocab_table_ids and len(vocab_table_ids) > 0:
db = get_sqlalchemy_db
with db.get_session() as session:
vocabs = session.query(AlchemyVocab).filter(
AlchemyVocab.vocab_table_id.in_(vocab_table_ids)).filter(
AlchemyVocab.name.in_(words)).all()
res = {vocab.name: vocab.desc for vocab in vocabs if vocab.desc is not None}
return {
"code": 0,
"msg": "成功",
"data": res
}
4.总结
FastAPI 提供了一个强大而灵活的方式来处理数组参数的 POST 请求。通过定义 Pydantic 模型,你可以确保数据的验证和序列化是自动化的。使用 FastAPI 的路由和异常处理功能,你可以构建一个健壯且易于维护的 API。
FastAPI 的性能和易用性使其成为构建 API 的首选框架之一,特别是当你需要处理复杂的数据结构和大量的数据时。通过上述步骤,你可以快速地实现一个能够接收和处理数组参数的 POST 请求的 API。
请注意,本文只是一个概述,实际开发中可能需要考虑更多的因素,如安全性、认证、日志记录等。但 FastAPI 提供了丰富的功能和中间件来支持这些高级特性。
觉得有用的话点个赞
👍🏻
呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙