python - passwordfield - WTForms de Flask: diferencia entre DataRequired y InputRequired
wtforms flask (1)
Respuesta corta
A menos que tenga una buena razón, debería usar InputRequired
¿Por qué?
Veamos algunas notas del docs / código:
Tenga en cuenta que existe una distinción entre esto y DataRequired en el sentido de que InputRequired observa que se proporcionaron datos de entrada de formulario y DataRequired examina los datos de coerción posterior.
y
NOTA: este validador se solía llamar
Required
pero su comportamiento (que requería datos forzados, no datos de entrada) significaba que funcionaba de manera no simétrica al validadorOptional
y además causaba confusión con ciertos campos que coaccionaban los datos para ''falsa'' valores como0
,Decimal(0)
,time(0)
etc. A menos que exista un motivo muy específico, recomendamos utilizar la clase:InputRequired
enInputRequired
lugar.
¿Qué significa esto?
En la clase Form
, verá dos argumentos de palabras clave formdata
y data
. Estos generalmente corresponden con dos métodos, process
y process_formdata
. Cuando los datos del formulario ingresan fuera del cable, no siempre están en el formato correspondiente al tipo de Field
. Un buen ejemplo de esto es el valor que se proporciona a un IntegerField
. Esto sería una mala noticia si tiene un validador u''1''
porque u''1''
no es un número.
El objetivo principal del método process_formdata
es evitar esta situación forzando el valor en su tipo correcto antes de ejecutar las reglas de validación. A eso se refieren cuando dicen "mira los datos de la coerción"
¡el problema!
Tanto InputRequired
como DataRequired
funcionan de la misma manera específicamente las implementaciones __call__
:
def __call__(self, form, field):
if not field.data or isinstance(field.data, string_types) and not field.data.strip():
if self.message is None:
message = field.gettext(''This field is required.'')
else:
message = self.message
Ciertos tipos de campo fuerzan a los datos a valores de Falsey (0, Decimal (0), etc.). El problema ocurre cuando tienes un IntegerField
y el formulario envía un valor como ''0''
. Si aplica DataRequired
a esto, fallará la validación. Esto se debe a que DataRequired
evaluará if not field.data...
después de la coerción donde field.data
es el valor numérico de Falsey 0
.
Cuál es la diferencia entre DataRequired
y InputRequired
en wtforms.valiadators
Tengo algunos campos en mi formulario de registro:
username
password
password_repeat
submit
¿Deberían estos campos usar el validador DataRequired
o InputRequired
?