我目前構建了一個 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 呼叫時觸發該函式?
uj5u.com熱心網友回復:
您必須使用pydantic的default_factory功能。
id: str = Field(default_factory=generate_id)
這將generate_id在您創建物件并將回傳值分配給id屬性時呼叫該函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312520.html
上一篇:如何在UnityC#中淡化音頻
