![](/img/trans.png)
[英]How to generate a UUID field with FastAPI, SQLalchemy, and SQLModel
[英]Return uppercase UUID in FastApi
在響應模型中使用帶有 pydantic 模型的 FastApi 時,我發現 http 響應總是返回小寫的 uuid。 有什么標准方法可以將它們大寫嗎?
from fastapi import FastAPI
from pydantic import BaseModel
from uuid import UUID
app = FastAPI()
class Test(BaseModel):
ID: UUID
@app.get("/test", response_model=Test)
async def test():
id_ = uuid.uuid4()
return Test(ID=id_)
發出請求時,返回的 uuid 將是小寫的。
from requestr
a = requests.get("http://localhost:800/test").text # you ir
# a -> '{"ID":"fffc0b5b-8e8d-4d06-b910-2ae8d616166c"}' # it is lowercased
我發現將它們返回大寫的唯一有點駭人聽聞的方法是覆蓋 uuid 類__str__
方法或子類化 uuid:
我嘗試過(並且有效):
# use in main.py when importing for first time
def newstr(self):
hex = '%032x' % self.int
return ('%s-%s-%s-%s-%s' % (hex[:8], hex[8:12], hex[12:16], hex[16:20], hex[20:])).upper()
uuid.UUID.__str__ = newstr
但我想知道是否有一種標准方法可以在不修改原始類的情況下執行此操作,可能是 pydantic 中的后期處理或 FastApi 中的設置。
您可以定義自定義json_encoders
:
class Test(BaseModel):
ID: UUID
class Config:
json_encoders = {
UUID: lambda val: str(val).upper()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.