Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Resolviendo errores en el código

6/25
Recursos

Aportes 7

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Un pequeño truquito:
Con Ctr sostenido y click sobre una clase, método o variable que estén usando, saltarán a la definición, es decir, los redirigirá hacia donde está el código fuente. Esto es muy útil si quieren entender cómo funciona una librería que instalaron o ahorrase tiempo en buscar archivos cuando estén buscando un error en tu propio código.

Les sugiero usar SecretStr para trabajar con las contraseñas.

from pydantic import SecretStr
...
# demás cosas ...
...
@app.post("/login",
    response_model=LoginOut)
def login(username: str = Form(...), password: SecretStr = Form(...)):
    return LoginOut(username=username)

El hecho de poder retornar un objeto es gracias al Encoder de FastApi, el cual esta convirtiendo la instancia en un diccionario automáticamente. es como usar el método dict o json que se heredan de pydantic.

Dependencia hasta el momento

fastapi==0.75.0
uvicorn==0.17.6
pydantic[email]
python-multipart==0.0.5

Formularios

Podemos decir que la forma en que entran datos a tráves de un formulario es un poco avanzada.

Debemos instalar una librería para trabajar con formularios: pip install python-multipart.

Resolviendo errores en el código

Recuerda que los diccionarios en Python son JSON.

5:18
1.-Tomar esta clase
2.-Inicializar el objeto (que va a ser un modelo de pydantic)
3.-Ese modelo de pydantic si se puede convertir a diccionario
4.-Ese diccionario si se puede convertir a json
5.-Por lo tanto debería funcionar

El problema de la clase pasada es que no se retorna un JSON, se está retornando una clase la cual no se puede convertir a un diccionario y por lo tanto, tampoco a un JSON.

Para solucionar el problema se tiene que instanciar la clase, es decir, se toma la clase LoginOut, se inicializa un objeto el cual es un modelo de Pydantic, y ese modelo sí se puede convertir a diccionario el cual puede convertirse a JSON.

@app.post(
    path='/login',
    response_model=LoginOut,
    status_code=status.HTTP_200_OK
)
def login(
    username: str = Form(...),
    password: str = Form(...)
    ):
    return LoginOut(username=username)