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 鈥榲alidator鈥

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.",
        
        )