FastAPI项目结构及一些常用方法

📅 2026/7/21 5:45:47
FastAPI项目结构及一些常用方法
项目结构fastApiProject/├─ venv/ # 项目虚拟环境git忽略不上传├─ migrations/ # Aerich 数据库迁移目录│ └─ models/ # 迁移脚本存放处├─ app/ # 业务核心包│ ├─ __init__.py│ ├─ main.py # 项目入口、FastAPI实例、生命周期、注册ORM│ ├─ config.py # 全局配置Tortoise ORM、环境变量、常量│ ├─ dependencies.py # 全局依赖鉴权、分页、通用校验│ ├─ exceptions.py # 全局异常捕获、自定义错误返回│ ├─ middlewares.py # 自定义中间件日志、跨域、请求耗时│ ├─ routers/ # 路由模块拆分│ │ ├─ __init__.py│ │ ├─ user_api.py # 用户相关接口│ │ └─ ... # 其他模块goods/order/admin等│ ├─ schemas/ # Pydantic 数据模型请求/响应序列化│ │ ├─ __init__.py│ │ └─ user_schema.py # 用户入参CreateUser、出参UserResp│ ├─ models/ # Tortoise ORM 数据库模型│ │ ├─ __init__.py│ │ └─ user_model.py # User 数据表模型│ └─ utils/ # 通用工具函数│ ├─ __init__.py│ ├─ response.py # 统一返回格式封装│ └─ common.py # 时间处理、加密、雪花ID等├─ pyproject.toml # Aerich 迁移配置文件自动生成├─ requirement.txt # 项目依赖清单└─ test_main.http # API测试文件IDE HTTP Client一、新增1. create 直接创建最常用# 单条新增 task await Task.create( title写代码, status0 ) print(task.id)二、查询1. get 根据主键查询不存在则抛异常task await Task.get(id1)2. get_or_none 不存在返回 Nonetask await Task.get_or_none(id999) if not task: return {code:400,msg:任务不存在}3. all () 查询全部数据all_tasks await Task.all()4. filter 条件筛选# 等值匹配 tasks await Task.filter(status0) # 模糊匹配 __icontains 不区分大小写 tasks await Task.filter(title__icontains代码) # 多条件 and tasks await Task.filter(status0, title__icontains代码)5. exclude 排除条件# 排除已完成 tasks await Task.exclude(status2)6. 排序 order_by# 正序 tasks await Task.all().order_by(created_at) # 倒序 加负号 tasks await Task.all().order_by(-created_at)7. count 统计总数total await Task.filter(status0).count()8. first () 取第一条task await Task.filter(status0).order_by(-id).first()三、Update 更新方式 1直接赋值 save ()task await Task.get_or_none(id1) task.status 2 task.completed_at datetime.now() await task.save()方式 2update_from_dict 批量赋值(注意需要主动调用一下save方法update_from_dict仅操作内存数据无法实现持久化)task await Task.get_or_none(id1) task.update_from_dict({ status: 2, completed_at: datetime.now() }) await task.save() # 必须手动save不会自动入库四、delete删除1.单条删除task await Task.get_or_none(id1) if task: await task.delete()2. 批量条件删除# 删除所有待办任务 await Task.filter(status0).delete()