簡體   English   中英

在 FastApi 中返回大寫 UUID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM