扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交换与成长
第一章:依靠注入核心原理
1.1 依靠树构建机制
- from fastapi import Depends
- def auth_service():
- return OAuth2Scheme()
- def db_conn(auth: dict = Depends(auth_service)):
- return Database(creds=auth)
- @app.get("/data")
- async def get_data(conn=Depends(db_conn)):
- return conn.query()
复制代码 依靠树可视化:
graph TDget_data --> db_conn --> auth_service1.2 作用域控制
- from fastapi import Depends, FastAPI
- from sqlalchemy.orm import sessionmaker
- SessionLocal = sessionmaker(autocommit=False)
- # 请求级作用域
- def get_db():
- db = SessionLocal()
- try:
- yield db
- finally:
- db.close()
- # 应用级单例
- cache = LRUCache(size=100)
- def get_cache():
- return cache
复制代码 第二章:Pydantic深度集成
2.1 动态模子注入
- from pydantic import create_model
- def dynamic_model(fields: dict):
- return create_model('DynamicModel', **fields)
- class FilterFactory:
- @classmethod
- def create(cls, model: BaseModel):
- class QueryParams(model):
- limit: int = 100
- offset: int = 0
- return QueryParams
- @app.get("/search")
- async def search(params=Depends(FilterFactory.create(User))):
- return params.dict()
复制代码 2.2 校验逻辑复用
[code]from pydantic import validator, root_validatorclass GeoValidator: @classmethod def lat_validator(cls, v): if not -90 |