FastAPI 学习指南
FastAPI 是一个现代、快速(高性能)的 Python Web 框架,用于构建 API。它基于 Python 类型提示,支持异步编程,并自动生成交互式 API 文档。以下是学习 FastAPI 的关键内容和方法。通过以上内容,可以快速掌握 FastAPI 的核心功能并构建高效的 API 应用。
·
FastAPI 学习指南
FastAPI 是一个现代、快速(高性能)的 Python Web 框架,用于构建 API。它基于 Python 类型提示,支持异步编程,并自动生成交互式 API 文档。以下是学习 FastAPI 的关键内容和方法。
核心概念
安装 FastAPI
使用 pip 安装 FastAPI 和 Uvicorn(ASGI 服务器):
pip install fastapi uvicorn
创建第一个 API
创建一个简单的 FastAPI 应用:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
运行应用:
uvicorn main:app --reload
路由和请求处理
路径参数
使用路径参数动态处理请求:
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
查询参数
处理查询参数:
@app.get("/items/")
def read_items(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}
请求体和模型
使用 Pydantic 模型
定义数据模型并验证请求体:
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
def create_item(item: Item):
return item
异步支持
异步路由
FastAPI 支持异步函数:
@app.get("/async/")
async def read_async():
return {"message": "Async endpoint"}
自动文档
交互式 API 文档
FastAPI 自动生成 Swagger UI 和 ReDoc 文档:
- Swagger UI:
http://127.0.0.1:8000/docs - ReDoc:
http://127.0.0.1:8000/redoc
依赖注入
依赖注入系统
使用依赖注入管理共享逻辑:
from fastapi import Depends
def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
中间件
添加中间件
使用中间件处理请求和响应:
from fastapi import Request
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
response = await call_next(request)
response.headers["X-Custom-Header"] = "FastAPI"
return response
安全性和认证
OAuth2 和 JWT
实现基于 OAuth2 和 JWT 的认证:
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.get("/users/me")
async def read_current_user(token: str = Depends(oauth2_scheme)):
return {"token": token}
数据库集成
SQLAlchemy 集成
使用 SQLAlchemy 连接数据库:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
测试和部署
测试 FastAPI 应用
使用 TestClient 编写测试:
from fastapi.testclient import TestClient
client = TestClient(app)
def test_read_root():
response = client.get("/")
assert response.status_code == 200
部署
使用 Uvicorn 或 Gunicorn 部署:
uvicorn main:app --host 0.0.0.0 --port 8000
学习资源
- 官方文档:https://fastapi.tiangolo.com/
- GitHub 仓库:https://github.com/tiangolo/fastapi
- 教程和示例:https://fastapi.tiangolo.com/tutorial/
通过以上内容,可以快速掌握 FastAPI 的核心功能并构建高效的 API 应用。
更多推荐
所有评论(0)