FastAPI请求取决于请求用户

2024-04-28 05:27:26 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这个模型:

class Thing(Base):
    id = Column(Integer, primary_key=True)
    owner_user_id = Column(Integer)

    def is_owned_by_user(self, user_id: int):
        return self.owner_user_id == user_id

这个模式是:

class ThingDB(BaseModel):
    id: int
    user_id: int

    class Config:
        orm_mode = True
    

class Thing(BaseModel):
    id: int
    user_id: int
    owned_by_me: bool

我想创建一个端点,返回上面的Thing模式,问题是它的字段owned_by_me不是绝对的,它取决于执行请求的用户

我找到的唯一方法是:

@router.get("/{thing_id}", response_model=schemas.Thing)
def read_game(
    thing_id: int,
    db: Session = Depends(get_db),
    current_user: models.User = Depends(get_current_user),
):
    thing = crud.thing.read(db, thing_id)
    return schemas.Thing(
        **schemas.ThingDB.from_orm(thing).dict(),
        owned_by_me=thing.is_owned_by_user(current_user.id)
    )

但我一点也不喜欢,我该怎么办

注意,所有与端点相关的事物都需要返回模式Thing,而不是ThingDB

p.p.S.我省略了一些代码,只留下必要的内容,但我主要遵循FastAPI文档,应该很清楚我要做什么


Tags: iddbgetby模式currentschemasclass