¿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 : )
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.