Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Modelos: User

16/25
Recursos

Aportes 4

Preguntas 1

Ordenar por:

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

¿Cómo validar una fecha?

Investigando un poco en las Docs de Pydantic encontré una forma bastante util de crear tus propias funciones que validen los campos de tus modelos, y lo podemos aplicar para fechas!

En mi caso mi clon de Twitter esta lleno de NSFW (nada lejos del twitter real xD) entonces quiero que solo se puedan registrar mayores de edad.

class User(BaseModel):
    user_id: UUID  = Field(...)
    user_name: str = Field(
        ...,
        min_length=3,
        max_length=10,
        example='sgewux'
    )
    email: EmailStr = Field(..., example='[email protected]')
    birth_date: datetime.date = Field(..., example='1998-06-23')
    gender: Optional[Genders] = Field(default=None, example=Genders.MALE)

    @validator('birth_date')  # Aqui está la magia
    def is_over_eighteen(cls, v):
        todays_date = datetime.date.today()
        delta = todays_date - v

        if delta.days/365 <= 18:
            raise ValueError('Must be over 18!')
        else:
            return v

En mi caso usé el validator decorator de Pydantic, al cual como puedes ver le paso como parametro el nombre del campo que quiero validar, lo uso para decorar una funcion de dos parametros (el primero es la clase misma NO una instancia, no la usaré pero la tengo que poner porque el validator es un classmethod y lo requiere), el segundo de ellos es el objeto a validar (pydantic al parecer tiene como convencion nombrarlo v). Implementas la logica del validador en esa funcion, la cual debe:

  • Elevar una exeption para cuando no es un dato correcto.
  • Retornar el dato mismo en caso de ser correcto.

Para todo esto debes importar de pydantic la funcion ‘validator’

Te recomiendo mucho leer la documentacion para ver otros ejemplos y explicaciones tecnicas : )

para los que no les sirva:

pip install "pydantic[email]"

Utilicen:

pip install email-validator

Como recordatorio 😃

  • Creamos una clase base la cual contiene la manera principal de contactar con un usuario. Su ID y su Email.

  • Creamos una clase adicional que hereda de la base. En donde solo almacenamos la contraseña con el fin principal de que al usar el modelo de User por buena práctica no devuelva la contraseña.

  • Y por último se crea User que igualmente hereda de la base para aprovechar el ID y el Email ; pero no hereda de la clase que tiene la contraseña para que esta no se vea involucrada cuando regresemos información del usuario.

Algo que Estube Viendo Como Mejorar la Contraseña

class UserLogin(UserBase):
    password: str = Field(
        ...,
        min_length=8,
        max_length=32,
        regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\[email protected]$!%*?&]{8,32}$",
        description="Password must be at least 8 characters long, contain at least one uppercase letter, one lowercase letter, one number and one special character.",
        
        )