一、异步编程基础概念
异步编程允许程序在等待耗时操作时执行其它任务,提高效率。Python通过asyncio库原生支持异步编程,核心关键字为async和await。
- async def:定义一个协程函数,调用它返回一个协程对象,不会立即执行函数体。
- await:只能在 async def 内部使用,表示挂起当前协程,等待一个异步操作完成,在此期间事件循环可以去执行其他任务。
import asyncio
async def fetch_data():
print("开始获取数据")
await asyncio.sleep(2) # 模拟I/O操作
print("数据获取完成")
return {"data": "示例"}
async def main():
task = asyncio.create_task(fetch_data())
print("其他任务继续执行")
result = await task
print(f"结果: {result}")
asyncio.run(main())
结论:Web 服务绝大部分时间都在等待数据库、网络、文件读写,采用异步模型可以极大提升并发能力。
二、Fast API快速入门
FastAPI是基于异步编程的现代Web框架,支持自动生成OpenAPI文档。
2.1 环境准备与安装
pip install fastapi "uvicorn[standard]"
2.2.创建main.py
#1.从 fastapi中导入FastAPI
from fastapi import FastAPI
#2.将FastAPI类实例化,以便后续调用
app = FastAPI()
#3. 定义访问路径,执行函数
@app.get("/")
async def root():
#4. 返回是以字典的形式访问
return {"message": "Hello World"}
#{}是一个占位符,summary定义备注,desc进行描述
@app.get("/hello/{name}", summary="ceshi", description="这是个测试接口")
async def say_hello(name: str):
return {"message": f"Hello {name}"}
2.3 启动服务器
pip install fastapi uvicorn httpx
uvicorn main:app –reload
2.4 验证结果
# 自动生成的 Swagger UI 交互式文档。你可以在这里直接测试接口!
http://127.0.0.1:8000/docs
三、路径参数
路径参数是URL路径中的动态可变部分,格式为{参数名} ,用于标识具体资源。Fast API可以自动提取参数所对应的值。,
并交给路由处理函数。示例如下:
#定义一个列表
Item_model = [
{"id": 1, "name": "苹果"},
{"id": 2, "name": "香蕉"},
{"id": 3, "name": "猕猴桃"},
{"id": 2, "name": "西瓜"},
]
#调用之前定义的实例化fastapi
@app.get("/item/{id}")
async def get_item(id: int):
for item in Item_model:
if item["id"] == id:
return {"code": 1, "msg": "查询成功", "data": item}
return {"message": "Item not found"}
@app.get("/users/{username}", summary="字符串路径参数")
async def read_user(username: str):
return {"username": username}
3.1 路径参数还可以使用Path进行限制数值范围。示例如下:
#导入Path包
from fastapi import Path
#在Path里面设置最小值,最大值
@app.get("/items/{item_id}")
async def read_item(
item_id: int = Path(
ge=1,
le=20,
title="商品名称",
description="这是商品ID",
)
):
return {'item_id': item_id}
@app.get("/price/{price}")
async def read_item(
price: float = Path(
ge=0.1,
title="商品ID",
description="这是商品ID",
)
):
return {'p': price}
备注:le小于等于,le小于;ge大于等于,gt大于
3.2 枚举限制(固定可选值)。 示例如下:
#导入枚举包
from enum import Enum
#定义类
class Item(str,Enum):
FAULT = "fruit"
VEGETABLE = "vegetable"
MEAT = "meat"
#通过路径进行调用
@app.get("/item_type/{item_type}")
def get_item_type(item_type: Item):
return {"item_type": item_type,
"value": item_type.value,
"name": item_type.name}
3.3 路径包含“/”
默认情况下,路径参数会被"/"进行分割,若需要路径中包含/(/files/home/user/doc.txt), 需要用path路径转换器。
@app.get("/file/{file_path:path}")
def read_file(file_path:str):
#/files/home/user/doc.txt → file_path = "home/user/doc.txt"
return {"file_path":file_path,"msg":"文件路径保存成功"}
以上路径可通过访问http://127.0.0.1:8000/docs查看自动生成的交互式文档。
四、总结
通过本次课程学习,我掌握了Python异步编程核心原理,理解了async/await提升服务并发的优势,熟练掌握FastAPI框架搭建、接口开发与参数校验用法,学会利用自动文档调试接口,夯实了高性能后端接口开发基础。





