首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FastAPI -调用API时调用函数

FastAPI -调用API时调用函数
EN

Stack Overflow用户
提问于 2021-10-13 17:53:45
回答 1查看 54关注 0票数 1

我目前构建了一个API,它有一个需要ID和时间戳的用户模式:

代码语言:javascript
复制
def ts():
    d = datetime.datetime.now()
    return datetime.datetime.timestamp(d)*1000


def generate_id():
    first = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(8))
    second = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(4))
    third = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(4))
    fourth = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(4))
    fifth = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(12))

    _id = f'{first}-{second}-{third}-{fourth}-{fifth}'
    return _id

class User(BaseModel):
    id: str = generate_id()
    username: str
    created_timestamp: Optional[str] = ts()

这是我创建用户的函数:

代码语言:javascript
复制
def create_user(db: Session, user: schemas.User):
    db_item = models.User(**user.dict())
    db.add(db_item)
    db.commit()
    db.refresh(db_item)
    return db_item


# Endpoint to create a new attribute
@app.post("/entity/", response_model=schemas.User)
def create_user(user: schemas.User, db: Session = Depends(get_db)):
    db_user = crud.get_id(db, id=user.id)
    if db_user is not None:
        raise HTTPException(status_code=400, detail="ID schon vergeben")
    mail_user = crud.get_email(db, email=user.email)
    if mail_user is not None:
        raise HTTPException(status_code=400, detail="Mail bereits vergeben")
    return crud.create_user(db=db, user=user)

端点本身可以工作,但是当我发出POST请求时,我第二次得到一个错误,因为ID没有被“刷新”。时间戳也保持不变,而且已经过时了。该函数似乎在服务器启动时被调用。有没有办法在每次API调用时都触发函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-13 18:50:08

你必须使用the default_factory functionality of pydantic

代码语言:javascript
复制
id: str = Field(default_factory=generate_id)

这将在您创建对象并将返回值分配给id属性时调用函数generate_id

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69560176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档