FastAPI Sessions 使用教程
项目介绍
FastAPI Sessions 是一个为 FastAPI 框架设计的会话管理库,旨在快速且方便地为 FastAPI 项目添加会话认证功能。该库支持依赖注入来保护路由,并且与 FastAPI 自动生成的文档兼容。FastAPI Sessions 的设计目标是用户友好和可定制,适用于需要会话管理的 Web 应用。
项目快速启动
安装 FastAPI Sessions
首先,确保你已经安装了 FastAPI 和 Uvicorn。然后,通过 pip 安装 FastAPI Sessions:
pip install fastapi-sessions
基本使用
以下是一个简单的示例,展示如何创建和验证会话:
from uuid import uuid4
from fastapi import FastAPI, Response
from fastapi_sessions.backends.implementations import InMemoryBackend
from fastapi_sessions.frontends.implementations import SessionCookie, CookieParameters
from fastapi_sessions.session_verifier import SessionVerifier
app = FastAPI()
class SessionData:
username: str
cookie_params = CookieParameters()
cookie = SessionCookie(
cookie_name="cookie",
identifier="general_verifier",
auto_error=True,
secret_key="DONOTUSE",
cookie_params=cookie_params,
)
backend = InMemoryBackend[uuid4, SessionData]()
class BasicVerifier(SessionVerifier[uuid4, SessionData]):
def __init__(
self,
identifier: str,
auto_error: bool,
backend: InMemoryBackend[uuid4, SessionData],
auth_http_exception: HTTPException,
):
self._identifier = identifier
self._auto_error = auto_error
self._backend = backend
self._auth_http_exception = auth_http_exception
def verify_session(self, model: SessionData) -> bool:
"""If the session exists, it is valid"""
return True
verifier = BasicVerifier(
identifier="general_verifier",
auto_error=True,
backend=backend,
auth_http_exception=HTTPException(status_code=403, detail="invalid session"),
)
@app.post("/create_session/{name}")
async def create_session(name: str, response: Response):
session = uuid4()
data = SessionData(username=name)
await backend.create(session, data)
cookie.attach_to_response(response, session)
return f"created session for {name}"
@app.get("/whoami", dependencies=[Depends(cookie)])
async def whoami(session_id: uuid4 = Depends(cookie)):
data = await backend.read(session_id)
if not data:
raise HTTPException(status_code=404, detail="No session found")
return data
应用案例和最佳实践
应用案例
FastAPI Sessions 可以用于各种需要用户会话管理的场景,例如:
- 用户登录系统
- 购物车管理
- 多步骤表单提交
最佳实践
- 安全密钥管理:确保会话密钥的安全性,不要在代码中硬编码密钥。
- 会话过期处理:设置合理的会话过期时间,定期清理过期会话。
- 错误处理:在会话验证失败时,返回适当的 HTTP 状态码和错误信息。
典型生态项目
FastAPI Sessions 可以与其他 FastAPI 生态项目结合使用,例如:
- FastAPI Users:一个用于用户管理和认证的库,可以与 FastAPI Sessions 结合使用,提供完整的用户认证解决方案。
- FastAPI CRUDRouter:一个自动生成 CRUD 路由的库,可以简化数据库操作的代码编写。
通过这些生态项目的结合,可以构建出功能丰富且高效的 Web 应用。