我目前构建了一个API,它有一个需要ID和时间戳的用户模式:
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()这是我创建用户的函数:
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调用时都触发函数?
发布于 2021-10-13 18:50:08
你必须使用the default_factory functionality of pydantic。
id: str = Field(default_factory=generate_id)这将在您创建对象并将返回值分配给id属性时调用函数generate_id。
https://stackoverflow.com/questions/69560176
复制相似问题