FastAPI依靠注入:参数共享与逻辑复用

打印 上一主题 下一主题

主题 1937|帖子 1937|积分 5811



扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交换与成长
第一章:依靠注入核心原理

1.1 依靠树构建机制
  1. from fastapi import Depends
  2. def auth_service():
  3.     return OAuth2Scheme()
  4. def db_conn(auth: dict = Depends(auth_service)):
  5.     return Database(creds=auth)
  6. @app.get("/data")
  7. async def get_data(conn=Depends(db_conn)):
  8.     return conn.query()
复制代码
依靠树可视化
graph TDget_data --> db_conn --> auth_service1.2 作用域控制
  1. from fastapi import Depends, FastAPI
  2. from sqlalchemy.orm import sessionmaker
  3. SessionLocal = sessionmaker(autocommit=False)
  4. # 请求级作用域
  5. def get_db():
  6.     db = SessionLocal()
  7.     try:
  8.         yield db
  9.     finally:
  10.         db.close()
  11. # 应用级单例
  12. cache = LRUCache(size=100)
  13. def get_cache():
  14.     return cache
复制代码
第二章:Pydantic深度集成

2.1 动态模子注入
  1. from pydantic import create_model
  2. def dynamic_model(fields: dict):
  3.     return create_model('DynamicModel', **fields)
  4. class FilterFactory:
  5.     @classmethod
  6.     def create(cls, model: BaseModel):
  7.         class QueryParams(model):
  8.             limit: int = 100
  9.             offset: int = 0
  10.         return QueryParams
  11. @app.get("/search")
  12. async def search(params=Depends(FilterFactory.create(User))):
  13.     return params.dict()
复制代码
2.2 校验逻辑复用

[code]from pydantic import validator, root_validatorclass GeoValidator:    @classmethod    def lat_validator(cls, v):        if not -90

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表