Ir para o conte√ļdo

Corpo - Campos

Da mesma forma que voc√™ pode declarar valida√ß√Ķes adicionais e metadados nos par√Ęmetros de fun√ß√Ķes de opera√ß√Ķes de rota com Query, Path e Body, voc√™ pode declarar valida√ß√Ķes e metadados dentro de modelos do Pydantic usando Field do Pydantic.

Importe Field

Primeiro, você tem que importá-lo:

from typing import Optional

from fastapi import Body, FastAPI
from pydantic import BaseModel, Field

app = FastAPI()


class Item(BaseModel):
    name: str
    description: Optional[str] = Field(
        None, title="The description of the item", max_length=300
    )
    price: float = Field(..., gt=0, description="The price must be greater than zero")
    tax: Optional[float] = None


@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item = Body(..., embed=True)):
    results = {"item_id": item_id, "item": item}
    return results

Aviso

Note que Field é importado diretamente do pydantic, não do fastapi como todo o resto (Query, Path, Body, etc).

Declare atributos do modelo

Você pode então utilizar Field com atributos do modelo:

from typing import Optional

from fastapi import Body, FastAPI
from pydantic import BaseModel, Field

app = FastAPI()


class Item(BaseModel):
    name: str
    description: Optional[str] = Field(
        None, title="The description of the item", max_length=300
    )
    price: float = Field(..., gt=0, description="The price must be greater than zero")
    tax: Optional[float] = None


@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item = Body(..., embed=True)):
    results = {"item_id": item_id, "item": item}
    return results

Field funciona da mesma forma que Query, Path e Body, ele possui todos os mesmos par√Ęmetros, etc.

Detalhes técnicos

Na realidade, Query, Path e outros que você verá em seguida, criam objetos de subclasses de uma classe Param comum, que é ela mesma uma subclasse da classe FieldInfo do Pydantic.

E Field do Pydantic retorna uma inst√Ęncia de FieldInfo tamb√©m.

Body também retorna objetos de uma subclasse de FieldInfo diretamente. E tem outras que você verá mais tarde que são subclasses da classe Body.

Lembre-se que quando voc√™ importa Query, Path, e outros de fastapi, esse s√£o na realidade fun√ß√Ķes que retornam classes especiais.

Dica

Note como cada atributo do modelo com um tipo, valor padr√£o e Field possuem a mesma estrutura que par√Ęmetros de fun√ß√Ķes de opera√ß√Ķes de rota, com Field ao inv√©s de Path, Query e Body.

Adicione informa√ß√Ķes extras

Você pode declarar informação extra em Field, Query, Body, etc. E isso será incluído no JSON Schema gerado.

Voc√™ ir√° aprender mais sobre adicionar informa√ß√Ķes extras posteriormente nessa documenta√ß√£o, quando estiver aprendendo a declarar exemplos.

Recapitulando

Voc√™ pode usar Field do Pydantic para declarar valida√ß√Ķes extras e metadados para atributos do modelo.

Você também pode usar os argumentos de palavras-chave extras para passar metadados do JSON Schema adicionais.