Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

148
Views
Clases de Pydantic personalizadas como parámetros de cuerpo de FastAPI

Pydantic dice que puede crear clases personalizadas simplemente definiendo el método __get_validators__ . Esto es útil si desea analizar una clase con su propia metaclase o por alguna otra razón no desea heredar de BaseModel .

Sin embargo, esto falla en lugares extraños en FastAPI. Por ejemplo, FastAPI no detecta una clase como un parámetro de cuerpo, pero siempre piensa que es un parámetro de consulta.

 from fastapi import FastAPI, Body from fastapi.testclient import TestClient app = FastAPI() class NastyMetaClass(type): pass class Foo(metaclass=NastyMetaClass): @classmethod def __get_validators__(cls): yield lambda value: True @app.post("/implicit") def foo(foo: Foo): # This is supposed to work, but does not return "It worked" @app.post("/explicit") def foo_body(foo: Foo = Body(...)): # The `= Body(...)` fixes it return "It worked" client = TestClient(app) response = client.post("/implicit", json={}) print(response.json()) # {'detail': [{'loc': ['query', 'foo'], 'msg': 'field required', 'type': 'value_error.missing'}]} response = client.post("/explicit", json={}) print(response.json()) # It worked

¿Cómo puedo hacer que FastAPI reconozca las clases Pydantic personalizadas?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Según la documentación de FastAPI , cuando usa Body(...) le indica a FastAPI que trate un parámetro como una clave de body . Por lo tanto, usar foo: Foo = Body(...) es una forma de decirle a su terminal que espere un cuerpo JSON con los atributos de Foo .

Alternativamente, puede definir el parámetro Foo usando Dependencies , como se muestra a continuación:

 from fastapi import Depends @app.post("/implicit") def foo(foo: Foo = Depends(Foo)): # This should work return "It worked"

Incluso podría simplemente usar Depends() (es decir, foo: Foo = Depends() ) como atajo para evitar la repetición del código.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!