鉴权怎么接到 Depends 上:OAuth2 Password 与 Bearer JWT

鉴权怎么接到 Depends 上:OAuth2 Password 与 Bearer JWT

FastAPI提倡通过Depends封装鉴权逻辑,采用OAuth2PasswordBearer处理token认证,确保路由无需重复鉴权代码。密码存储必须用pwdlib等专用库进行哈希,即使校验失败也应隐藏用户是否存在。JWT需设置30分钟短期有效期(HS256算法),密钥必须通过openssl生成且存放在环境变量,避免明文泄露。认证流程应分离登录接口(返回token)和资源保护路由(验证 token并解密用户信息)。注意事项包括:JWT不适宜长期会话,防止密钥暴露在仓库,禁止自定义鉴权中间件替代官方方案。读者收益为掌握标准鉴权架构、安全配置要点及常见错误应对策略。

数据库会话怎么进接口:SQLAlchemy 与依赖覆盖

FastAPI数据库会话需通过依赖注入实现请求级隔离。核心方法:1.应用启动时配置数据库引擎 SessionLocal;2.路由使用db: DbDep依赖注入,成功路径自动提交事务,异常路径自动回滚;3.测试时通过dependency_overrides覆盖SessionLocal为内存会话实现隔离测试。关键注意事项:禁止使用全局会话导致并发污染,路由层代码仅负责增删改查逻辑不重复提交,确保连接字符串通过环境变量配置。同步模式下避免在async函数内使用同步驱动操作,异步模式需使用postgresql+asyncpg等特定协议引擎。此架构支持金字塔应用模式,满足90%常规业务场景需求,为后续实现乐观锁、审计追踪等高级特性奠定基础。

数据库会话怎么进接口:SQLAlchemy 与依赖覆盖
测试怎么写才不连真实库:TestClient 与 dependency_overrides

测试怎么写才不连真实库:TestClient 与 dependency_overrides

FastAPI接口测试需验证状态码、JSON结构及鉴权分支,而非检查数据库状态。使用TestClient模拟ASGI流程,推荐依赖替换而非真实环境启动,避免端口冲突及性能损耗。重点覆盖get_db、get_current_user等依赖函数的参数分支:1)用FakeSession模拟数据库依赖,通过dependency_overrides接收替换的函数对象,确保替换的是原始注入函数而非同名新函数;2)测试user分支时替换依赖函数构造单元测试,集成测试保留生产依赖;3)错误测试需覆盖契约约束修改,如GE422时的Pydantic字段验证失效。常见误区包括:在每个测试中重复初始化uvicorn服务、混淆测试层级导致集成测试coverage下降、暴露真实JWT密钥引发环境耦合。遵循分层测试原则:单元测试替换应用层依赖,仅通过API契约验证业务逻辑;生产部署测试才接触真实数据库及认证密钥,确保测试效率与代码健壮性。

依赖注入到底省了什么:Depends、yield 与生命周期

FastAPI 通过依赖注入分离请求处理逻辑,路径函数仅声明所需服务。每个依赖在请求开始时创建,完成后自动清理。支持 yield 实现类似 context managers 的行为,确保资源正确定位。例如:路由依赖通过 `Depends(get_settings)` 从外部获取配置,数据库会话通过内层依赖的 yield 机制保证生命周期管理。需注意依赖深度不宜超过三层,防止性能下降和理解困难。常见误区包括:全局数据库会话导致并发错误;滥用依赖埋抽象复杂性;忽略 yield 后异常自动回滚。正确实践能提升代码复用性、可测试性与调试效率,同时减少状态管理错误,为后续中间件和部署优化奠定基础。

依赖注入到底省了什么:Depends、yield 与生命周期
弹