Enlace de datos y validación
En Un formulario que hace algo cada campo se leía y se revisaba a mano.
Aquí los controles hacen ese trabajo solos: cada uno está enlazado a un campo de los datos del formulario,
lleva sus propias reglas y muestra su propio mensaje de error. El Python que queda por escribir es un solo if.
| Objetivo | Tiempo | Nivel | Necesitas |
|---|---|---|---|
| Un formulario de registro que se valida solo | 25 minutos | Intermedio · un poco de Python | Un formulario que hace algo |
Qué vas a aprender
Sección titulada «Qué vas a aprender»- Enlazar un campo a una clave de
form.data(en los dos sentidos: muestra el valor y guarda lo que escribe el usuario). - Mostrar una expresión en vivo en una etiqueta (
f"Nice to meet you, {name}!"). - Añadir reglas: obligatorio, un patrón, una longitud mínima, un número mínimo, tu propio mensaje.
- Validarlo todo con
form.validate(), y leerform.datayform.errors.

-
Dibuja el formulario. Un formulario nuevo llamado
signupcon un Título, una Etiqueta de texto llamadagreeting, tres Cuadros de texto (your_name,email,password, este último con Contraseña activado), un Número (Number box) llamadoage, una Casilla (Check box) llamadaterms(textoI accept the terms), una etiqueta pequeñasummary, una etiquetastatusy un Botón llamadocreate. -
Enlaza los campos. Selecciona
your_namey, en la sección Datos (Data) de Propiedades, escribenameen Enlazar a (Bind to). Haz lo mismo con los demás:Control Enlazar a Reglas (sección Datos) your_namenameObligatorio emailemailObligatorio, Patrón [^@\s]+@[^@\s]+\.[a-z]{2,}, MensajeEnter a valid emailpasswordpasswordObligatorio, Longitud mínima 8 ageageMínimo 13, Mensaje You must be 13 or oldertermstermsObligatorio (una casilla solo pasa si está marcada), Mensaje Please accept the terms
La sección Datos: el campo al que está enlazado el control y sus reglas. -
Muestra una expresión en vivo. Un control de solo lectura (etiqueta, título, insignia…) puede enlazarse a una expresión de Python sobre los datos, que se recalcula en cada redibujado. Selecciona
greetingy pon en Enlazar a:f"Nice to meet you, {name}!" if name else "Fill in the form below."Y en
summary:f"{len(password)} characters in your password" -
Ejecútalo (F5) y escribe. El saludo sigue a tu nombre letra a letra, y cada campo revisa sus reglas mientras escribes: un borde rojo y una burbuja con el mensaje debajo.
-
Valida al hacer clic. Haz doble clic en
createy escribe el manejador:def create_click(form, event):if not form.validate(): # revisa cada regla y muestra cada mensajeform.status.color = "error"form.status.text = f"{len(form.errors)} field(s) need your attention."returndata = form.data # {"name": ..., "email": ..., "age": 18, "terms": True, ...}form.status.color = "success"form.status.text = f"Welcome aboard, {data['name']}!"form.dataes un dict normal que llenan los controles enlazados. Guárdalo, envíalo a una API o pásalo a otro formulario.
Código completo
Sección titulada «Código completo»signup.pzform guarda el diseño, los enlaces y las reglas; signup.py, solo el botón:
"""Event handlers for the sign-up form (tutorial: Data binding and validation).
pyzed run examples/tutorial/designer/signup.pzform
The controls are bound to fields of ``form.data`` (Properties → Data → Bind to) and carry theirvalidation rules, so the handler only has to call ``form.validate()`` and read ``form.data``."""
def create_click(form, event): """Runs when create is clicked.""" if not form.validate(): # checks every rule and shows the messages under the controls form.status.color = "error" form.status.text = f"{len(form.errors)} field(s) need your attention." return data = form.data # {"name": ..., "email": ..., "password": ..., "age": ..., "terms": True} print("New account:", {k: v for k, v in data.items() if k != "password"}) form.status.color = "success" form.status.text = f"Welcome aboard, {data['name']}!"uv run --with pyzed-ui pyzed run examples/tutorial/designer/signup.pzformpython3 -m venv .venvsource .venv/bin/activatepython -m pip install pyzed-uipyzed run examples/tutorial/designer/signup.pzformpy -m venv .venv.venv\Scripts\Activate.ps1python -m pip install pyzed-uipyzed run examples\tutorial\designer\signup.pzformpython3 -m pyzed run examples/tutorial/designer/signup.pzformpy -m pyzed run examples\tutorial\designer\signup.pzformEventos de este tutorial
Sección titulada «Eventos de este tutorial»Los controles enlazados casi no necesitan eventos: cada cambio va solo a form.data. El formulario tiene un handler,
create_click, que llama a form.validate() y lee form.data.
Prueba más eventos
Sección titulada «Prueba más eventos»def form_load(form, event): # empieza en la primera caja return form.name.focus()
def terms_change(form, event): # una casilla: event.value es True o False form.create.enabled = event.value
def email_change(form, event): # comprueba un campo mientras se escribe form.email.validate() # muestra (o quita) su mensaje al momentoSiguiente
Sección titulada «Siguiente»- Enlace de datos y validación en el manual del diseñador: rutas anidadas
(
customer.address.city), tablas, traducciones con@clavesy vista previa en otros idiomas. - Errores de validación de Pydantic, Django o FastAPI.
- Una app con varias vistas.