实践高性能Python FastAPI开发web应用
“Fast”指的是开发团队创建原型 API 服务器和扩展已投入生产的 API 服务器的速度
。通过使用 FastAPI 意味着可以节省开发时间,减少编码错误,用更少的编码实现其功能!
接下来给大家快速示例基于FastAPI开发web服务;强烈推荐大家在docker环境里部署和开发!使用的镜像我推荐下面的官方镜像为主:
官方仓库模板:fastapi/full-stack-fastapi-template: Full stack, modern web application template
项目目录层级介绍
📁 项目根目录/
├── 📁 .cursor # Cursor编辑器配置文件
├── 📁 kilocode # 代码相关配置或工具
├── 📁 venv # Python虚拟环境
├── 📁 vscode # VS Code编辑器配置文件
└── 📁 app # 主应用程序目录
├──── 📁 alembic # 数据库迁移工具
├──── 📁 api # API接口层
├──── 📁 core # 核心配置和基础组件
├──── 📁 crud # 数据库CRUD操作
├──── 📁 db # 数据库相关配置
├──── 📁 integrations # 第三方集成服务
├──── 📁 middleware # 中间件
├──── 📁 model # 数据模型/Pydantic模型
├──── 📁 operations # 业务逻辑操作
├──── 📁 schedule # 定时任务调度
├──── 📁 schema # 数据架构/验证模式
├──── 📁 test # 测试文件
├──── 📁 utility # 工具函数和辅助功能
└── 📄 main.py # 应用程序入口文件
架构层级
•
🌐 API接口层 (绿色) - 处理HTTP请求和响应
•
🧠 业务逻辑层 (蓝色) - 核心业务处理
•
🗄️ 数据访问层 (紫色) - 数据库操作和管理
•
🔧 系统核心层 (红色) - 基础配置和测试
镜像源
可以直接使用docker基础镜像进行开发
Dockerfile.yaml如下
FROM library/python:3.9-slim-bullseye
WORKDIR /service
# Fix timezone
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
# Install dependencies
COPY ./src/requirements.txt /service
ENV PIP_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple"
RUN --mount=type=cache,target=/root/.cache/pip \
python3 -m pip install pip --upgrade -i $PIP_INDEX_URL && \
python3 -m pip config set global.index-url --site $PIP_INDEX_URL && \
python3 -m pip install -r requirements.txt --upgrade > /var/log/pip.log
接下来按照以下流程进行开发API
model
定义数据库表,使用Alembic进行表迁移管理
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String, nullable=False, index=True)
email = Column(String, unique=True, nullable=False)
hashed_password = Column(String, nullable=True)
schemas
定义pydantic,实现数据字段校验
class UserBase(BaseModel):
......
email: Optional[EmailStr] = None
name: Optional[str] = None
......
crud
定义对数据库等基础操作公共函数
class CRUDUser(CRUDBase[User, UserCreate, UserUpdate]):
pass
user = CRUDUser(User)
API接口层
定义API函数
@router.post("/", response_model=schema.User)
async def create_user(
*,
db: Session = Depends(deps.get_db),
user_in: schema.UserIn,
) -> Any:
"""
Create new user.
"""
pass
swagger
调试演示
apifox
推荐使用APIFOX测试
评论区