FastAPI使用笔记

FastAPI使用笔记

1、依赖包

python 复制代码
aerich==0.9.0
aiofiles==24.1.0
aiomysql==0.2.0
aiosqlite==0.21.0
annotated-types==0.7.0
anyio==4.9.0
asyncclick==8.1.8.0
certifi==2025.4.26
click==8.1.8
colorama==0.4.6
dictdiffer==0.9.0
dnspython==2.7.0
email_validator==2.2.0
fastapi==0.115.12
fastapi-cli==0.0.7
h11==0.16.0
httpcore==1.0.9
httptools==0.6.4
httpx==0.28.1
idna==3.10
iso8601==2.1.0
Jinja2==3.1.6
markdown-it-py==3.0.0
MarkupSafe==3.0.2
mdurl==0.1.2
pydantic==2.11.4
pydantic_core==2.33.2
Pygments==2.19.1
PyMySQL==1.1.1
pypika-tortoise==0.6.0
python-dotenv==1.1.0
python-multipart==0.0.20
pytz==2025.2
PyYAML==6.0.2
rich==14.0.0
rich-toolkit==0.14.6
setuptools==78.1.1
shellingham==1.5.4
sniffio==1.3.1
starlette==0.46.2
tomlkit==0.13.2
tortoise-orm==0.25.0
typer==0.15.4
typing-inspection==0.4.0
typing_extensions==4.13.2
uvicorn==0.34.2
watchfiles==1.0.5
websockets==15.0.1
wheel==0.45.1

2、初级实现

python 复制代码
# 第一个fastapi程序
import uvicorn
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


# 启动服务
# 1. 通过命令: uvicorn filename:app_name --reload  #启动服务,并自动重新加载代码内容
# 2. 通过调试: fastapi dev filename.py   # 安装fastapi[standard]
# 3. 通过py运行: python filename.py  # 要有运行项目的代码
if __name__ == "__main__":
    uvicorn.run('main01:app', host="127.0.0.1", port=8000, reload=True)
    # uvicorn.run(app, host="127.0.0.1", port=8000)  #不让加reload

3、FastAPI路径参数

python 复制代码
# 路径参数
from fastapi import FastAPI

app = FastAPI()


@app.get("/args1/1")
def path_args1():
    return {"message": "id1"}


@app.get("/args2/{id}")
def path_args2(id):
    return {"message": id}


@app.get("/args3/{id}")
def path_args3(id):
    return {"message2": id}


@app.get("/args4/{id}/{name}")
def path_args4(id: int, name):
    return {"message": id, "name": name}


if __name__ == "__main__":
    import uvicorn
    uvicorn.run('main03:app', host="127.0.0.1", port=8000, reload=True)

4、FastAPI查询参数

python 复制代码
# 查询参数
from fastapi import FastAPI

app = FastAPI()


@app.get("/query1")
def page_limit(page, limit):
    return {"page": page, "limit": limit}


@app.get("/query2")
def page_limit2(page: int, limit=None):
    if limit:
        return {"page": page, "limit": limit}
    return {"page": page}


@app.get("/query3/{page}")
def page_limit3(page: int, limit=None):
    if limit:
        return {"page": page, "limit": limit}
    return {"page": page}


if __name__ == '__main__':
    import uvicorn
    uvicorn.run('main04:app', host="127.0.0.1", port=8000, reload=True)

5、FastAPI请求体

python 复制代码
# 请求体 传参数
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class User(BaseModel):
    name: str
    age: int
    pwd: str | None
    sex: str = "男"


@app.post('/users')
def create_user(user: dict):
    return user


@app.post('/users2')
def create_user2(user: User):
    return user


if __name__ == '__main__':
    import uvicorn
    uvicorn.run('main05:app', host="127.0.0.1", port=8000, reload=True)

6、FastAPI请求参数验证

类型验证

python 复制代码
# Python原生类型注解
from typing import Union, Optional, List
from fastapi import FastAPI

app = FastAPI()


@app.get('/items1/{item_id}')
def read_item1(item_id: int):
    return {'item_id': item_id}


@app.get('/items2/{item_id}')
def read_item2(item_id: str):
    return {'item_id': item_id}


@app.get('/items3/{item_id}')
def read_item3(item_id: Union[str, int]):
    return {'item_id': item_id}


@app.get('/items4/{item_id}')
def read_item4(item_id: Union[str, int] = 110):
    '''这个不可用默认参数'''
    return {'item_id': item_id}


@app.get('/items5')
def read_item5(item_id: Union[int, None] = None):
    return {'item_id': item_id}


@app.get('/items6')
def read_item6(item_id: Optional[int] = None):
    '''这个Optional是Union[T, None]的缩写'''
    return {'item_id': item_id}


@app.get('/items7')
def read_item7(item_ids: List):
    return {'item_id': item_ids}


# @app.get('/items8/{item_ids}')
# def read_item8(item_ids: List[int]):
#     return {'item_id': item_ids}


if __name__ == '__main__':
    import uvicorn
    uvicorn.run('main06:app', host="127.0.0.1", port=8000, reload=True)

7、FastAPI请求参数验证_Query方式

python 复制代码
# 查询参数Query
from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items1")
def read_item1(item_id: str = Query(123)):
    return {"item_id": item_id}


@app.get("/items2")
def read_item2(item_id: str = Query(...)):
    '''必须传递'''
    return {"item_id": item_id}


@app.get("/items3")
def read_item3(item_id: str = Query(..., min_length=3, max_length=6)):
    '''必须传递,限制内容长度'''
    return {"item_id": item_id}


@app.get("/items4")
def read_item4(item_id: int = Query(..., gt=0, lt=100)):
    '''必须传递,限制内容大小'''
    return {"item_id": item_id}


@app.get("/items5")
def read_item5(item_id: int = Query(..., alias='id')):
    '''必须传递,修改名称'''
    return {"item_id": item_id}


@app.get("/items6")
def read_item6(item_id: int = Query(..., description="这个字段是来筛选产品的ID")):
    '''必须传递,说明'''
    return {"item_id": item_id}


@app.get("/items7")
def read_item7(item_id: int = Query(..., deprecated=True)):
    '''必须传递,被抛弃了'''
    return {"item_id": item_id}


@app.get("/items8")
def read_item8(item_id: str = Query(..., regex='^a\d{2}$')):
    '''必须传递,通过正则匹配,pattern,regex'''
    return {"item_id": item_id}


if __name__ == '__main__':
    import uvicorn
    uvicorn.run('main07:app', host="127.0.0.1", port=8000, reload=True)
相关推荐
TinyMemory1 分钟前
Java 面向对象核心入门(六):this 关键字完全解析
java·笔记·面向对象·java新手·this关键字
淬炼之火6 分钟前
笔记:Visually-Guided Policy Optimization for Multimodal Reasoning
人工智能·笔记·算法·机器学习·语言模型·自然语言处理
一条破秋裤22 分钟前
STM32 学习笔记:中断系统与 EXTI 外部中断
笔记·stm32·学习
摇滚侠26 分钟前
《SpringBoot 3:入门与应用实战》第 9 章 使用 WebMvc 开发应用 阅读笔记 21
java·spring boot·笔记
xieliyu.40 分钟前
计算机网络‑IP 协议解析:核心特性总结
网络·笔记·网络协议·学习·tcp/ip·计算机网络
陈年老古董1 小时前
PyTorch 实现 MNIST 手写数字识别学习笔记
笔记·python·深度学习·学习
风123456789~1 小时前
【架构设计】3.2 信息化系统的典型应用 3/6
笔记·系统架构设计
风123456789~1 小时前
【架构设计】第3章 信息系统基础知识 1/6
笔记·系统架构设计
吃着火锅x唱着歌1 小时前
Effective C++ 学习笔记 条款45 运用成员函数模板接受所有兼容类型
c++·笔记·学习
Capricorn19881 小时前
Ox Alpha 1M 上下文科研引用失真怎么排查?知芽 Notebook Skill 技术链路实操
人工智能·笔记·python·深度学习·知识图谱·论文笔记