Estoy haciendo una función y una clase con el método de publicación.
Dado que uso FastAPI, genera automáticamente la página de documentos de Swagger y puedo ver la descripción de la función o datos de ejemplo allí.
Mi clase y función son como a continuación,
from pydantic import BaseModel, Field from typing import Optional, List @app.post("/user/item") def func1(args1: User, args2: Item): ... class User(BaseModel): name: str state: List[str] class Config: schema_extra = { "example": { "name": "Mike", "state": ["Texas", "Arizona"] } } class Item(BaseModel): _id: int = Field(..., example=3, description="item id") A través schema_extra y el atributo de example en Field , puedo ver el valor de ejemplo en el Request body de descripción de la función.
se muestra como
{ "args1": { "name": "Mike", "state": ["Texas", "Arizona"] # state user visits. <-- I'd like to add this here or in other place. }, "args2: { "_id": 3 <-- Here I can't description 'item id' } } Sin embargo, me gustaría agregar una descripción o comentarios al example value , como # visitas de usuarios de estado anteriores.
Intenté agregar el atributo de description de pydantic Field , pero creo que solo se muestra para los parámetros del método get.
¿Hay alguna manera de hacer esto? Cualquier ayuda será apreciada.
Está intentando pasar "comentarios" dentro de la carga útil JSON real que se enviará al servidor. Por lo tanto, tal enfoque no funcionaría. La forma de agregar una description a los campos es como se muestra a continuación. Los usuarios/usted puede ver las descripciones/comentarios, así como los ejemplos proporcionados, expandiendo el esquema JSON correspondiente de un modelo de Pydantic (por ejemplo, "Usuario") en "Esquemas" (en la parte inferior de la página) al visitar OpenAPI en http://127.0.0.1:8000/docs , por ejemplo. O bien, haciendo clic en "Esquema", junto a "Valor de ejemplo", encima del ejemplo proporcionado en el "Cuerpo de la solicitud".
class User(BaseModel): name: str = Field(..., description="Add user name") state: List[str] = Field(..., description="State user visits") class Config: schema_extra = { "example": { "name": "Mike", "state": ["Texas", "Arizona"] } } Alternativamente, puede usar el campo Body en su punto final, lo que le permite agregar una descripción que se muestra debajo del ejemplo en el "Cuerpo de la solicitud". Según la documentación :
Pero cuando usa un
exampleoexamplescon cualquiera de las otras utilidades (Query(),Body(), etc.) esos ejemplos no se agregan al esquema JSON que describe esos datos (ni siquiera a la propia versión del esquema JSON de OpenAPI), se agregan directamente a la declaración de la operación de ruta en OpenAPI (fuera de las partes de OpenAPI que usan JSON Schema).
Puede agregar varios ejemplos (con sus descripciones asociadas), como se describe en la documentación . Ejemplo a continuación:
@app.post("/user/item") async def update_item( user: User = Body( ..., examples={ "normal": { "summary": "A normal example", "description": "**name**: Add user name. **state**: State user vistis. ", "value": { "name": "Mike", "state": ["Texas", "Arizona"] }, } } ), ): return {"user": user}