validator passwordfield form example python flask wtforms flask-wtforms

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 validador Optional y además causaba confusión con ciertos campos que coaccionaban los datos para ''falsa'' valores como 0 , Decimal(0) , time(0) etc. A menos que exista un motivo muy específico, recomendamos utilizar la clase: InputRequired en InputRequired 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 ?