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
Requiredpero su comportamiento (que requería datos forzados, no datos de entrada) significaba que funcionaba de manera no simétrica al validadorOptionaly 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:InputRequiredenInputRequiredlugar.
¿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 ?