Formularios

5/25
Recursos

Aportes 12

Preguntas 6

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

cortaron la parte del mensaje : P

Podr谩s seguir todos mis apuntes escritos en Notion en:
https://rain-scabiosa-74f.notion.site/Curso-de-FastAPI-Avanzado-189668eeee1a45168e46c5be56312967
Si te gusta dejame un corazoncito 鈾

Formularios

Form Data - FastAPI

FastApi no funciona por defecto con formularios debemos dar uso de la libreria python multipart instalas usando

$ pip install python-multipart

Tienes que importar Form de FastAPI

from fastapi import Form

app = FastAPI()

@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
    return {"username": username}

Usando Form puedes validar la data de la misma forma que lo har铆as con Path, Query y Body

Los cursos de Facundo son como las series, cada cap铆tulo te deja con la inc贸gnita de que pasar谩 en el siguiente video y de la nada ya han pasado 4 horas jajaja

Para excluir el password del response, se puede usar

response_model_exclude={'password'}

En el Ejemplo del video quedaria algo asi:

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

app: FastAPI = FastAPI()

class LoginOut(BaseModel):
    username: str = Field(..., max_length=20, example='gus')
    password: str = Field(..., min_length=2, max_length=20, example='123')
    message: str = Field(default='Login successful :)', description='Description message')

@app.post(
    path='/login',
    response_model=LoginOut,
    status_code=200,
    response_model_exclude={'password'},
)
def login(username: str = Form(...), password=Form(...)):
    return LoginOut(username=username, password=password)

La documentaci贸n interactiva de la API en Swagger UI se me hace muy familiar (pero no igual) al panel de administraci贸n de Django.

Aporte

No se ve como a帽ade el mensaje de respuesta, pero yo lo realic茅 de la siguiente manera.

# Pydantic
from pydantic import BaseModel
from pydantic import Field

# FastAPI
from fastapi import FastAPI
from fastapi import status
from fastapi import Form

app = FastAPI()


# ==========
# Models
# ==========


class LoginOut(BaseModel):
    username: str = Field(...,
                          description='Username',
                          example='admin')

    message: str = Field(default='Login successful',
                         description='Message to return to the user')


# ==========
# Endpoints
# ==========


@app.get('/')
def default():
    return {
        'message': 'Hello World'
    }


@app.post(
    path='/login',
    response_model=LoginOut,
    status_code=status.HTTP_200_OK,
)
def post(
    username: str = Form(...,
                         min_length=3,
                         max_length=10,
                         example='root'),

    password: str = Form(...,
                         min_length=8,
                         max_length=50,
                         example='toor'),
) -> LoginOut:

    # Do something with the data
    print(password)

    # Return the response body
    return LoginOut(username=username)

librer铆a para trabajar con formularios:
pip install python-multipart

Para agregar el paquete y empezar bien la clase utilizamos en la consola:

pip3 install python-multipart

Y tengo sospecha de que este paquete se utilizara en la siguiente clase y no a煤n.

Tip: no es necesario escribir 2 commits como hace el profe, basta con escribir
git commit -am "mensaje"
y automaticamente se guarda todo y se crea el commit

pip3 install python-multipart

As铆 agregas el mensaje de 茅xito 馃憞

username: str = Field(
    ...,
    min_length=3,
    max_length=20,
    example='jhonsonpics'
    )
message: str = 'Succesfully Logged'