Python FastAPI轻松入门:实战案例解析,快速构建高效Web应用

引言
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,由 Python 3.6+ 的类型提示功能驱动。它具有异步处理能力,能够提供高效的性能。本文将带领您轻松入门 FastAPI,并通过实战案例解析,帮助您快速构建高效的 Web 应用。
FastAPI 简介
1. 特点
异步处理
:FastAPI 使用 Starlette 和 Pydantic,能够异步处理请求,提高性能。
类型提示
:通过 Python 3.6+ 的类型提示功能,实现自动验证和文档生成。
自动文档
:FastAPI 自动生成交互式 API 文档,方便开发者测试和调试。
依赖注入
:支持依赖注入,简化代码结构。
2. 安装
pip install fastapi uvicorn
快速构建 FastAPI 应用
1. 创建项目结构
my_project/
│
├── main.py
├── models/
│ └── user.py
└── app/
├── __init__.py
├── dependencies.py
└── routes/
├── __init__.py
└── users.py
2. 定义数据模型
在
models/user.py
中定义用户数据模型:
from pydantic import BaseModel

class User(BaseModel):
id: int
name: str
age: int
3. 创建路由和视图
在
app/routes/users.py
中创建用户路由和视图:
from fastapi import APIRouter, Depends, HTTPException
from models.user import User
from .dependencies import get_current_user

router = APIRouter()

@router.get(“/users/{user_id}”, response_model=User)
def get_user(user_id: int, current_user: User = Depends(get_current_user)):
# 查询用户数据
# …
return current_user
4. 定义依赖项
在
app/dependencies.py
中定义依赖项:
from fastapi import HTTPException, Depends, status
from models.user import User
from typing import Optional

async def get_current_user(token: str = Depends()):
# 验证 token,获取用户信息
# …
return User(id=1, name=”Alice”, age=30)
5. 运行应用
在
main.py
中启动 FastAPI 应用:
from fastapi import FastAPI
from app import router

app = FastAPI()

app.include_router(router)
使用
uvicorn
运行应用:
uvicorn main:app –reload
访问
http://127.0.0.1:8000/docs
,查看自动生成的 API 文档。
实战案例解析
1. 异步数据库操作
假设我们使用
SQLAlchemy
作为数据库 ORM,以下是一个异步查询用户的示例:
from sqlalchemy.orm import Session
from app.models import User

async def get_user_by_id(db: Session, user_id: int):
return db.query(User).filter(User.id == user_id).first()
2. 依赖注入
在 FastAPI 中,依赖注入可以简化代码结构,提高可维护性。以下是一个使用依赖注入获取当前用户的示例:
from fastapi import Depends, HTTPException

async def get_current_user(token: str = Depends()):
# 验证 token,获取用户信息
# …
return User(id=1, name=”Alice”, age=30)
3. 自定义异常处理
在 FastAPI 中,可以使用
HTTPException
抛出自定义异常:
from fastapi import HTTPException

class UserNotFoundException(Exception):
pass

@router.get(“/users/{user_id}”, response_model=User)
async def get_user(user_id: int, current_user: User = Depends(get_current_user)):
user = await get_user_by_id(user_id)
if not user:
raise HTTPException(status_code=404, detail=”User not found”)
return user
总结
本文介绍了 FastAPI 的基本概念、快速构建 Web 应用的步骤,并通过实战案例解析了 FastAPI 的应用场景。通过学习本文,您应该能够轻松入门 FastAPI,并快速构建高效的 Web 应用。