# Creare un'app bancaria Parte 2: Creare un modulo di login e registrazione
```mermaid
journey
title Your Form Development Journey
section HTML Foundation
Understand form elements: 3: Student
Learn input types: 4: Student
Master accessibility: 4: Student
section JavaScript Integration
Handle form submission: 4: Student
Implement AJAX communication: 5: Student
Process server responses: 5: Student
section Validation Systems
Create multi-layer validation: 5: Student
Enhance user experience: 5: Student
Ensure data integrity: 5: Student
```
## Quiz Pre-Lezione
[Quiz pre-lezione](https://ff-quizzes.netlify.app/web/quiz/43)
Hai mai compilato un modulo online e ti è stato rifiutato il formato dell'email? O hai perso tutte le informazioni quando hai cliccato su "Invia"? Tutti abbiamo vissuto queste esperienze frustranti.
I moduli sono il ponte tra gli utenti e la funzionalità della tua applicazione. Come i protocolli accurati che i controllori di volo usano per guidare gli aerei in sicurezza verso le loro destinazioni, i moduli ben progettati forniscono feedback chiari e prevengono errori costosi. I moduli mal progettati, invece, possono allontanare gli utenti più velocemente di una comunicazione errata in un aeroporto affollato.
In questa lezione trasformeremo la tua app bancaria statica in un'applicazione interattiva. Imparerai a creare moduli che convalidano l'input degli utenti, comunicano con i server e forniscono feedback utili. Pensalo come la costruzione dell'interfaccia di controllo che consente agli utenti di navigare tra le funzionalità della tua applicazione.
Alla fine, avrai un sistema completo di login e registrazione con validazione che guida gli utenti verso il successo piuttosto che la frustrazione.
```mermaid
mindmap
root((Form Development))
HTML Foundation
Semantic Elements
Input Types
Accessibility
Label Association
User Experience
Validation Feedback
Error Prevention
Loading States
Success Messaging
JavaScript Integration
Event Handling
AJAX Communication
Data Processing
Error Management
Validation Layers
HTML5 Validation
Client-side Logic
Server-side Security
Progressive Enhancement
Modern Patterns
Fetch API
Async/Await
Form Data API
Promise Handling
```
## Prerequisiti
Prima di iniziare a creare moduli, assicuriamoci che tutto sia configurato correttamente. Questa lezione riprende esattamente da dove ci siamo fermati nella precedente, quindi se hai saltato qualche passaggio, potresti voler tornare indietro e far funzionare le basi prima di procedere.
### Configurazione Necessaria
| Componente | Stato | Descrizione |
|------------|-------|-------------|
| [Template HTML](../1-template-route/README.md) | ✅ Necessario | La struttura di base della tua app bancaria |
| [Node.js](https://nodejs.org) | ✅ Necessario | Runtime JavaScript per il server |
| [Server API Bancario](../api/README.md) | ✅ Necessario | Servizio backend per l'archiviazione dei dati |
> 💡 **Consiglio per lo sviluppo**: Dovrai eseguire due server separati contemporaneamente – uno per la tua app bancaria front-end e un altro per l'API backend. Questa configurazione rispecchia lo sviluppo reale, dove i servizi frontend e backend operano indipendentemente.
### Configurazione del Server
**Il tuo ambiente di sviluppo includerà:**
- **Server frontend**: Serve la tua app bancaria (tipicamente porta `3000`)
- **Server API backend**: Gestisce l'archiviazione e il recupero dei dati (porta `5000`)
- **Entrambi i server** possono funzionare contemporaneamente senza conflitti
**Test della connessione API:**
```bash
curl http://localhost:5000/api
# Expected response: "Bank API v1.0.0"
```
**Se vedi la risposta della versione API, sei pronto per procedere!**
---
## Comprendere i moduli HTML e i controlli
I moduli HTML sono il modo in cui gli utenti comunicano con la tua applicazione web. Pensali come il sistema telegrafico che collegava luoghi lontani nel XIX secolo – sono il protocollo di comunicazione tra l'intento dell'utente e la risposta dell'applicazione. Quando progettati con attenzione, catturano errori, guidano la formattazione degli input e forniscono suggerimenti utili.
I moduli moderni sono significativamente più sofisticati rispetto ai semplici input di testo. HTML5 ha introdotto tipi di input specializzati che gestiscono automaticamente la validazione delle email, la formattazione dei numeri e la selezione delle date. Questi miglioramenti favoriscono sia l'accessibilità che le esperienze degli utenti mobili.
### Elementi Essenziali del Modulo
**Blocchi fondamentali di ogni modulo:**
```html
```
**Ecco cosa fa questo codice:**
- **Crea** un contenitore per il modulo con un identificatore unico
- **Specifica** il metodo HTTP per l'invio dei dati
- **Associa** etichette agli input per l'accessibilità
- **Definisce** un pulsante di invio per elaborare il modulo
### Tipi di Input Moderni e Attributi
| Tipo di Input | Scopo | Esempio di Utilizzo |
|---------------|-------|---------------------|
| `text` | Input di testo generico | `` |
| `email` | Validazione email | `` |
| `password` | Inserimento di testo nascosto | `` |
| `number` | Input numerico | `` |
| `tel` | Numeri di telefono | `` |
> 💡 **Vantaggio HTML5 Moderno**: Usare tipi di input specifici fornisce validazione automatica, tastiere mobili appropriate e un migliore supporto per l'accessibilità senza bisogno di JavaScript aggiuntivo!
### Tipi di Pulsanti e Comportamento
```html
```
**Ecco cosa fa ogni tipo di pulsante:**
- **Pulsanti di invio**: Attivano l'invio del modulo e inviano i dati al punto finale specificato
- **Pulsanti di reset**: Ripristinano tutti i campi del modulo al loro stato iniziale
- **Pulsanti regolari**: Non forniscono alcun comportamento predefinito, richiedendo JavaScript personalizzato per la funzionalità
> ⚠️ **Nota Importante**: L'elemento `` è auto-chiudente e non richiede un tag di chiusura. La pratica moderna è scrivere `` senza la barra.
### Creare il Modulo di Login
Ora creiamo un modulo di login pratico che dimostra le pratiche moderne dei moduli HTML. Inizieremo con una struttura di base e la miglioreremo gradualmente con funzionalità di accessibilità e validazione.
```html
Bank App
Login
```
**Analisi di ciò che accade qui:**
- **Struttura** il modulo con elementi semantici HTML5
- **Raggruppa** elementi correlati usando contenitori `div` con classi significative
- **Associa** etichette agli input usando gli attributi `for` e `id`
- **Include** attributi moderni come `autocomplete` e `placeholder` per una migliore UX
- **Aggiunge** `novalidate` per gestire la validazione con JavaScript invece delle impostazioni predefinite del browser
### L'importanza delle Etichette Corrette
**Perché le etichette sono importanti per lo sviluppo web moderno:**
```mermaid
graph TD
A[Label Element] --> B[Screen Reader Support]
A --> C[Click Target Expansion]
A --> D[Form Validation]
A --> E[SEO Benefits]
B --> F[Accessible to all users]
C --> G[Better mobile experience]
D --> H[Clear error messaging]
E --> I[Better search ranking]
```
**Cosa ottengono le etichette corrette:**
- **Permettono** ai lettori di schermo di annunciare chiaramente i campi del modulo
- **Espandono** l'area cliccabile (cliccando sull'etichetta si focalizza l'input)
- **Migliorano** l'usabilità mobile con target di tocco più grandi
- **Supportano** la validazione del modulo con messaggi di errore significativi
- **Migliorano** la SEO fornendo significato semantico agli elementi del modulo
> 🎯 **Obiettivo Accessibilità**: Ogni input del modulo dovrebbe avere un'etichetta associata. Questa semplice pratica rende i tuoi moduli utilizzabili da tutti, inclusi gli utenti con disabilità, e migliora l'esperienza per tutti gli utenti.
### Creare il Modulo di Registrazione
Il modulo di registrazione richiede informazioni più dettagliate per creare un account utente completo. Costruiamolo con funzionalità moderne di HTML5 e accessibilità migliorata.
```html
Register
```
**Nel codice sopra abbiamo:**
- **Organizzato** ogni campo in contenitori div per uno stile e layout migliori
- **Aggiunto** attributi `autocomplete` appropriati per il supporto di riempimento automatico del browser
- **Incluso** testo placeholder utile per guidare l'input dell'utente
- **Impostato** valori predefiniti sensati usando l'attributo `value`
- **Applicato** attributi di validazione come `required`, `maxlength` e `min`
- **Usato** `type="number"` per il campo saldo con supporto decimale
### Esplorare Tipi di Input e Comportamento
**I tipi di input moderni offrono funzionalità avanzate:**
| Funzione | Beneficio | Esempio |
|----------|-----------|---------|
| `type="number"` | Tastierino numerico su mobile | Inserimento saldo più semplice |
| `step="0.01"` | Controllo della precisione decimale | Permette i centesimi nella valuta |
| `autocomplete` | Riempimento automatico del browser | Completamento del modulo più veloce |
| `placeholder` | Suggerimenti contestuali | Guida le aspettative dell'utente |
> 🎯 **Sfida Accessibilità**: Prova a navigare nei moduli usando solo la tastiera! Usa `Tab` per spostarti tra i campi, `Space` per selezionare le caselle e `Enter` per inviare. Questa esperienza ti aiuta a capire come gli utenti con lettori di schermo interagiscono con i tuoi moduli.
### 🔄 **Verifica Pedagogica**
**Comprensione delle Basi del Modulo**: Prima di implementare JavaScript, assicurati di comprendere:
- ✅ Come l'HTML semantico crea strutture di moduli accessibili
- ✅ Perché i tipi di input sono importanti per tastiere mobili e validazione
- ✅ La relazione tra etichette e controlli del modulo
- ✅ Come gli attributi del modulo influenzano il comportamento predefinito del browser
**Auto-Test Rapido**: Cosa succede se invii un modulo senza gestione JavaScript?
*Risposta: Il browser esegue l'invio predefinito, solitamente reindirizzando all'URL di azione*
**Benefici dei Moduli HTML5**: I moduli moderni offrono:
- **Validazione Integrata**: Controllo automatico del formato email e numerico
- **Ottimizzazione Mobile**: Tastiere appropriate per diversi tipi di input
- **Accessibilità**: Supporto per lettori di schermo e navigazione tramite tastiera
- **Miglioramento Progressivo**: Funziona anche quando JavaScript è disabilitato
## Comprendere i Metodi di Invio del Modulo
Quando qualcuno compila il tuo modulo e clicca su "Invia", quei dati devono andare da qualche parte – solitamente a un server che può salvarli. Ci sono diversi modi in cui questo può accadere, e sapere quale usare può evitarti problemi in futuro.
Vediamo cosa succede realmente quando qualcuno clicca su quel pulsante di invio.
### Comportamento Predefinito del Modulo
Per prima cosa, osserviamo cosa accade con l'invio di un modulo di base:
**Testa i tuoi moduli attuali:**
1. Clicca sul pulsante *Registrati* nel tuo modulo
2. Osserva i cambiamenti nella barra degli indirizzi del browser
3. Nota come la pagina si ricarica e i dati appaiono nell'URL

### Confronto tra Metodi HTTP
```mermaid
graph TD
A[Form Submission] --> B{HTTP Method}
B -->|GET| C[Data in URL]
B -->|POST| D[Data in Request Body]
C --> E[Visible in address bar]
C --> F[Limited data size]
C --> G[Bookmarkable]
D --> H[Hidden from URL]
D --> I[Large data capacity]
D --> J[More secure]
```
**Comprendere le differenze:**
| Metodo | Caso d'uso | Posizione dei dati | Livello di sicurezza | Limite di dimensione |
|--------|------------|--------------------|----------------------|----------------------|
| `GET` | Query di ricerca, filtri | Parametri URL | Basso (visibile) | ~2000 caratteri |
| `POST` | Account utente, dati sensibili | Corpo della richiesta | Alto (nascosto) | Nessun limite pratico |
**Comprendere le differenze fondamentali:**
- **GET**: Aggiunge i dati del modulo all'URL come parametri di query (appropriato per operazioni di ricerca)
- **POST**: Include i dati nel corpo della richiesta (essenziale per informazioni sensibili)
- **Limitazioni GET**: Vincoli di dimensione, dati visibili, cronologia persistente del browser
- **Vantaggi POST**: Capacità di dati elevata, protezione della privacy, supporto per il caricamento di file
> 💡 **Migliore Pratica**: Usa `GET` per moduli di ricerca e filtri (recupero dati), usa `POST` per registrazione utente, login e creazione di dati.
### Configurare l'Invio del Modulo
Configuriamo il tuo modulo di registrazione per comunicare correttamente con l'API backend usando il metodo POST:
```html
```
**Comprendere la validazione avanzata:**
- **Combina** indicatori di campi obbligatori con descrizioni utili
- **Include** attributi `pattern` per la validazione del formato
- **Fornisce** attributi `title` per l'accessibilità e i tooltip
- **Aggiunge** testo di aiuto per guidare l'input dell'utente
- **Utilizza** una struttura HTML semantica per una migliore accessibilità
### Regole di validazione avanzate
**Cosa realizza ogni regola di validazione:**
| Campo | Regole di validazione | Vantaggio per l'utente |
|-------|-----------------------|------------------------|
| Nome utente | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | Garantisce identificatori validi e unici |
| Valuta | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | Accetta simboli di valuta comuni |
| Saldo | `min="0"`, `step="0.01"`, `type="number"` | Impedisce saldi negativi |
| Descrizione | `maxlength="100"` | Limiti di lunghezza ragionevoli |
### Testare il comportamento della validazione
**Prova questi scenari di validazione:**
1. **Invia** il modulo con campi obbligatori vuoti
2. **Inserisci** un nome utente più corto di 3 caratteri
3. **Prova** caratteri speciali nel campo nome utente
4. **Inserisci** un importo di saldo negativo

**Cosa osserverai:**
- **Il browser mostra** messaggi di validazione nativi
- **Cambiamenti di stile** basati sugli stati `:valid` e `:invalid`
- **L'invio del modulo** è impedito finché tutte le validazioni non sono superate
- **Il focus si sposta automaticamente** sul primo campo non valido
### Validazione lato client vs lato server
```mermaid
graph LR
A[Client-Side Validation] --> B[Instant Feedback]
A --> C[Better UX]
A --> D[Reduced Server Load]
E[Server-Side Validation] --> F[Security]
E --> G[Data Integrity]
E --> H[Business Rules]
A -.-> I[Both Required]
E -.-> I
```
**Perché hai bisogno di entrambi i livelli:**
- **Validazione lato client**: Fornisce feedback immediato e migliora l'esperienza utente
- **Validazione lato server**: Garantisce sicurezza e gestisce regole aziendali complesse
- **Approccio combinato**: Crea applicazioni robuste, user-friendly e sicure
- **Miglioramento progressivo**: Funziona anche quando JavaScript è disabilitato
> 🛡️ **Promemoria sulla sicurezza**: Non fidarti mai solo della validazione lato client! Gli utenti malintenzionati possono bypassare i controlli lato client, quindi la validazione lato server è essenziale per la sicurezza e l'integrità dei dati.
### ⚡ **Cosa puoi fare nei prossimi 5 minuti**
- [ ] Testa il tuo modulo con dati non validi per vedere i messaggi di validazione
- [ ] Prova a inviare il modulo con JavaScript disabilitato per vedere la validazione HTML5
- [ ] Apri gli strumenti per sviluppatori del browser e ispeziona i dati del modulo inviati al server
- [ ] Sperimenta con diversi tipi di input per vedere i cambiamenti della tastiera su dispositivi mobili
### 🎯 **Cosa puoi realizzare in quest'ora**
- [ ] Completa il quiz post-lezione e comprendi i concetti di gestione dei moduli
- [ ] Implementa la sfida di validazione completa con feedback in tempo reale
- [ ] Aggiungi uno stile CSS per creare moduli dall'aspetto professionale
- [ ] Crea una gestione degli errori per nomi utente duplicati e errori del server
- [ ] Aggiungi campi di conferma password con validazione corrispondente
### 📅 **Il tuo viaggio settimanale per la padronanza dei moduli**
- [ ] Completa l'app bancaria completa con funzionalità avanzate del modulo
- [ ] Implementa la capacità di caricare file per foto profilo o documenti
- [ ] Aggiungi moduli a più passaggi con indicatori di progresso e gestione dello stato
- [ ] Crea moduli dinamici che si adattano in base alle selezioni dell'utente
- [ ] Implementa il salvataggio automatico del modulo e il recupero per una migliore esperienza utente
- [ ] Aggiungi validazioni avanzate come la verifica e-mail e la formattazione del numero di telefono
### 🌟 **Il tuo mese di padronanza dello sviluppo frontend**
- [ ] Crea applicazioni di moduli complessi con logica condizionale e flussi di lavoro
- [ ] Impara librerie e framework per moduli per uno sviluppo rapido
- [ ] Padroneggia le linee guida sull'accessibilità e i principi di design inclusivo
- [ ] Implementa l'internazionalizzazione e la localizzazione per moduli globali
- [ ] Crea librerie di componenti per moduli riutilizzabili e sistemi di design
- [ ] Contribuisci a progetti open source sui moduli e condividi le migliori pratiche
## 🎯 La tua timeline per la padronanza dello sviluppo dei moduli
```mermaid
timeline
title Form Development & User Experience Learning Progression
section HTML Foundation (15 minutes)
Semantic Forms: Form elements
: Input types
: Labels and accessibility
: Progressive enhancement
section JavaScript Integration (25 minutes)
Event Handling: Form submission
: Data collection
: AJAX communication
: Async/await patterns
section Validation Systems (35 minutes)
Multi-layer Security: HTML5 validation
: Client-side logic
: Server-side verification
: Error handling
section User Experience (45 minutes)
Interface Polish: Loading states
: Success messaging
: Error recovery
: Accessibility features
section Advanced Patterns (1 week)
Professional Forms: Dynamic validation
: Multi-step workflows
: File uploads
: Real-time feedback
section Enterprise Skills (1 month)
Production Applications: Form libraries
: Testing strategies
: Performance optimization
: Security best practices
```
### 🛠️ Riepilogo del tuo toolkit per lo sviluppo dei moduli
Dopo aver completato questa lezione, hai ora padroneggiato:
- **Moduli HTML5**: Struttura semantica, tipi di input e funzionalità di accessibilità
- **Gestione dei moduli in JavaScript**: Gestione degli eventi, raccolta dati e comunicazione AJAX
- **Architettura di validazione**: Validazione multilivello per sicurezza ed esperienza utente
- **Programmazione asincrona**: Fetch API moderna e modelli async/await
- **Gestione degli errori**: Gestione completa degli errori e sistemi di feedback per gli utenti
- **Progettazione dell'esperienza utente**: Stati di caricamento, messaggi di successo e recupero dagli errori
- **Miglioramento progressivo**: Moduli che funzionano su tutti i browser e capacità
**Applicazioni reali**: Le tue competenze nello sviluppo di moduli si applicano direttamente a:
- **Applicazioni di e-commerce**: Processi di checkout, registrazione account e moduli di pagamento
- **Software aziendale**: Sistemi di inserimento dati, interfacce di reportistica e applicazioni di flusso di lavoro
- **Gestione dei contenuti**: Piattaforme di pubblicazione, contenuti generati dagli utenti e interfacce amministrative
- **Applicazioni finanziarie**: Interfacce bancarie, piattaforme di investimento e sistemi di transazione
- **Sistemi sanitari**: Portali per pazienti, prenotazione di appuntamenti e moduli per cartelle cliniche
- **Piattaforme educative**: Registrazione ai corsi, strumenti di valutazione e gestione dell'apprendimento
**Competenze professionali acquisite**: Ora puoi:
- **Progettare** moduli accessibili che funzionano per tutti gli utenti, inclusi quelli con disabilità
- **Implementare** una validazione sicura dei moduli che previene la corruzione dei dati e le vulnerabilità di sicurezza
- **Creare** interfacce utente reattive che forniscono feedback e indicazioni chiare
- **Debuggare** interazioni complesse dei moduli utilizzando strumenti per sviluppatori del browser e analisi di rete
- **Ottimizzare** le prestazioni dei moduli attraverso strategie di gestione e validazione dei dati efficienti
**Concetti di sviluppo frontend padroneggiati**:
- **Architettura basata sugli eventi**: Gestione delle interazioni utente e dei sistemi di risposta
- **Programmazione asincrona**: Comunicazione con il server non bloccante e gestione degli errori
- **Validazione dei dati**: Controlli di sicurezza e integrità lato client e server
- **Progettazione dell'esperienza utente**: Interfacce intuitive che guidano gli utenti verso il successo
- **Ingegneria dell'accessibilità**: Design inclusivo che funziona per le diverse esigenze degli utenti
**Livello successivo**: Sei pronto per esplorare librerie avanzate per moduli, implementare regole di validazione complesse o costruire sistemi di raccolta dati di livello aziendale!
🌟 **Obiettivo raggiunto**: Hai costruito un sistema completo di gestione dei moduli con validazione professionale, gestione degli errori e modelli di esperienza utente!
---
---
## Sfida GitHub Copilot Agent 🚀
Usa la modalità Agent per completare la seguente sfida:
**Descrizione:** Migliora il modulo di registrazione con una validazione completa lato client e un feedback per l'utente. Questa sfida ti aiuterà a praticare la validazione dei moduli, la gestione degli errori e il miglioramento dell'esperienza utente con feedback interattivi.
**Prompt:** Crea un sistema completo di validazione per il modulo di registrazione che includa: 1) Feedback di validazione in tempo reale per ogni campo mentre l'utente digita, 2) Messaggi di validazione personalizzati che appaiono sotto ogni campo di input, 3) Un campo di conferma della password con validazione di corrispondenza, 4) Indicatori visivi (come segni di spunta verdi per i campi validi e avvisi rossi per quelli non validi), 5) Un pulsante di invio che si abilita solo quando tutte le validazioni sono superate. Usa gli attributi di validazione di HTML5, CSS per lo stile degli stati di validazione e JavaScript per il comportamento interattivo.
Scopri di più su [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) qui.
## 🚀 Sfida
Mostra un messaggio di errore nell'HTML se l'utente esiste già.
Ecco un esempio di come potrebbe apparire la pagina di login finale dopo un po' di styling:

## Quiz post-lezione
[Quiz post-lezione](https://ff-quizzes.netlify.app/web/quiz/44)
## Revisione e studio autonomo
Gli sviluppatori sono diventati molto creativi nella costruzione dei moduli, specialmente per quanto riguarda le strategie di validazione. Scopri diversi flussi di moduli dando un'occhiata a [CodePen](https://codepen.com); riesci a trovare moduli interessanti e ispiratori?
## Compito
[Stilizza la tua app bancaria](assignment.md)
---
**Disclaimer**:
Questo documento è stato tradotto utilizzando il servizio di traduzione AI [Co-op Translator](https://github.com/Azure/co-op-translator). Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.