# Ehita pangarakendus Osa 2: Ehita sisselogimis- ja registreerimisvorm
```mermaid
journey
title Teie vormi arendamise teekond
section HTML alus
Mõistke vormi elemente: 3: Student
Õppige sisenditüüpe: 4: Student
Valdake juurdepääsetavust: 4: Student
section JavaScripti integratsioon
Töötle vormi esitust: 4: Student
Rakendage AJAX-i suhtlus: 5: Student
Töötle serveri vastuseid: 5: Student
section valideerimissüsteemid
Loo mitmekihiline valideerimine: 5: Student
Parandage kasutajakogemust: 5: Student
Tagage andmete terviklikkus: 5: Student
```
## Eelkontrolli viktoriin
[Eelkontrolli viktoriin](https://ff-quizzes.netlify.app/web/quiz/43)
Kas oled kunagi täitnud veebivormi ja see on sinu e-posti vormingu tagasi lükanud? Või kaotanud kogu info peale esitamist? Me kõik oleme nende tüütute olukordadega kokku puutunud.
Vormid on silla teie kasutajate ja teie rakenduse funktsioonide vahel. Nagu lennujuhtide hoolikad protokollid, mis juhivad lennukeid turvaliselt sihtkohta, annavad hästi kujundatud vormid selget tagasisidet ja hoiavad ära kulukad vead. Halbade vormide puhul võib kasutajaid ära jooksutada kiiremini kui valestimõistmine tihedas lennujaamas.
Selles õppetükis muudame teie staatilise pangarakenduse interaktiivseks rakenduseks. Õpite ehitama vorme, mis valideerivad kasutaja sisendi, suhtlevad serveritega ja annavad kasulikku tagasisidet. Mõelge sellele kui juhtpaneelile, mis laseb kasutajatel navigeerida teie rakenduse funktsioonide vahel.
Õppetüki lõpuks on teil täielik sisselogimise ja registreerimise süsteem koos valideerimisega, mis juhib kasutajad edu, mitte pettumuse poole.
```mermaid
mindmap
root((Vormi Arendamine))
HTML Foundation
Semantilised Elemendid
Sisendi Tüübid
Juurdepääsetavus
Sildi Seos
User Experience
Kinnitus Tagasiside
Vigade Ennetamine
Laadimise Statiigid
Edu Teavitamine
JavaScript Integration
Sündmuste Töötlemine
AJAX Kommunikatsioon
Andmete Töötlemine
Vigade Haldamine
Validation Layers
HTML5 Kinnitus
Kliendipoolne Loogika
Serveripoolne Turvalisus
Progressiivne Täiustamine
Modern Patterns
Fetch API
Async/Await
Vormi Andmete API
Lubaduste Haldamine
```
## Nõuded ettevalmistuseks
Enne vormide ehitamist veendume, et teil on kõik õigesti seadistatud. See õppetükk jätkab otse sealt, kus eelmine lõppes, seega kui te hüppasite ettepoole, võiksite kõigepealt põhialused toimima saada.
### Vajalik seadistus
| Komponent | Staatus | Kirjeldus |
|-----------|---------|-----------|
| [HTML mallid](../1-template-route/README.md) | ✅ Nõutav | Teie põhiline pangarakenduse struktuur |
| [Node.js](https://nodejs.org) | ✅ Nõutav | JavaScripti runtime serveri jaoks |
| [Panganduse API server](../api/README.md) | ✅ Nõutav | Tagapõhja teenus andmete salvestamiseks |
> 💡 **Arendaja näpunäide**: Te jooksutate samaaegselt kahte eraldi serverit – ühte teie front-end pangarakendusele ja teist tagapõhja API-le. See seadistus peegeldab reaalse maailma arengut, kus esiplaan ja tagapõhi töötavad iseseisvalt.
### Serveri konfiguratsioon
**Teie arenduskeskkond hõlmab:**
- **Front-end server**: Teenindab teie pangarakendust (tavaliselt port 3000)
- **Tagapõhja API server**: Käitleb andmete salvestamist ja päringuid (port 5000)
- **Mõlemad serverid** saavad töötada samaaegselt ilma konfliktideta
**Testimaks API ühendust:**
```bash
curl http://localhost:5000/api
# Oodatav vastus: "Panga API v1.0.0"
```
**Kui näete API versiooni vastust, olete valmis edasi minema!**
---
## HTML vormide ja kontrollide mõistmine
HTML vormid on vahend, mille kaudu kasutajad suhtlevad teie veebirakendusega. Mõelge neile kui telegrafisüsteemile, mis 19. sajandil ühendaski kaugeid kohti – need on kommunikatsiooniprotokoll kasutaja kavatsuse ja rakenduse vastuse vahel. Hoolikalt kujundatud vormid tabavad vigu, juhivad sisendi vormindamist ja annavad kasulikke soovitusi.
Tänapäevased vormid on oluliselt keerukamad kui lihtsad tekstiväljad. HTML5 tõi sisse eraldi sisenditüübid, mis automaatselt tegelevad e-posti valideerimise, numbrivormingu ja kuupäeva valikuga. Need täiustused parandavad nii ligipääsetavust kui ka mobiilikasutajate kogemust.
### Olulised vormielemendid
**Kõikide vormide ehitusplokid:**
```html
```
**Mis see kood teeb:**
- **Loob** vormi konteineri unikaalse identifikaatoriga
- **Määrab** HTTP meetodi andmete edastamiseks
- **Sidub** sildid sisenditega ligipääsetavuse tagamiseks
- **Määratleb** nuppu vormi esitamiseks
### Moodsa sisendi tüübid ja atribuudid
| Sisendi tüüp | Eesmärk | Näide kasutusest |
|--------------|---------|------------------|
| `text` | Üldine tekstisisend | `` |
| `email` | E-posti valideerimine | `` |
| `password` | Peidetud tekstisisend | `` |
| `number` | Numbriline sisend | `` |
| `tel` | Telefoninumbrid | `` |
> 💡 **Moodsa HTML5 eelis**: Spetsiifiliste sisenditüüpide kasutamine tagab automaatse valideerimise, sobivad mobiilklaviatuurid ja parema ligipääsetavuse ilma lisajavaskriptita!
### Nuppude tüübid ja käitumine
```html
```
**Mis iga nupu tüüp teeb:**
- **Esitamisnupud**: Käivitavad vormi esitamise ja saadavad andmed määratud aadressile
- **Lähtestamisnupud**: Taastavad kõik vormi väljad algseisundisse
- **Tavalised nupud**: Ei anna vaikimisi käitumist, vajavad kohandatud JavaScripti funktsionaalsust
> ⚠️ **Oluline märkus**: `` element on isesulguv ja ei vaja sulgemistähist. Moodne praktika on kirjutada `` ilma kaldkriipsuta.
### Sisselogimisvormi ehitamine
Teeme praktilise sisselogimisvormi, mis demonstreerib kaasaegseid HTML vormipraktikaid. Alustame lihtsast struktuurist ja täiustame seda järk-järgult ligipääsetavuse funktsioonide ja valideerimisega.
```html
Bank App
Login
```
**Mis siin toimub:**
- **Struktureerib** vormi semantiliste HTML5 elementidega
- **Grupeerib** seotud elemendid `div` konteineritega tähenduslike klassidega
- **Sidub** sildid sisenditega `for` ja `id` atribuutide abil
- **Lisab** moodsad atribuudid nagu `autocomplete` ja `placeholder`, et parandada kasutajakogemust
- **Lisab** `novalidate`, et valideerimist teha JavaScriptiga brauseri vaikimisi asemel
### Õigete siltide jõud
**Miks on sildid tänapäeva veebiarenduses olulised:**
```mermaid
graph TD
A[Sildi element] --> B[Ekraanilugerite tugi]
A --> C[Klikitava sihtmärgi suurendamine]
A --> D[Vormi valideerimine]
A --> E[SEO eelised]
B --> F[Ligipääsetav kõigile kasutajatele]
C --> G[Parem mobiilikogemus]
D --> H[Selged veateated]
E --> I[Parem otsingutulemus]
```
**Mida õiged sildid saavutavad:**
- **Võimaldab** ekraanilugeritel vormivälju selgelt teatada
- **Suurendab** klikkimispinda (sildi vajutamine keskendub sisendile)
- **Parandab** mobiilikasutust suuremate puutepindadega
- **Toetab** vormi valideerimist mõistlike veateadetega
- **Tõstab** SEO-d, andes semantilise tähenduse vormielementidele
> 🎯 **Ligipääsetavuse eesmärk**: Igale vormisisendile peaks olema seotud silt. See lihtne tava teeb teie vormid ligipääsetavaks kõigile, kaasa arvatud puuetega kasutajatele, ja parandab kõigi kasutajate kogemust.
### Registreerimisvormi loomine
Registreerimisvorm nõuab kasutaja konto loomiseks ulatuslikumat teavet. Ehitage see kaasaegsete HTML5 funktsioonide ja parema ligipääsetavusega.
```html
Register
```
**Ülal oleme:**
- **Korraldanud** iga välja konteiner `div`-idesse parema kujunduse ja paigutuse jaoks
- **Lisanud** sobivad `autocomplete` atribuudid brauseri automaatse täitmise toetuseks
- **Lisaks** abistava kohatäitjate tekstiga kasutaja juhendamiseks
- **Seadnud** mõistlikud vaikimisi väärtused `value` atribuudi abil
- **Rakendanud** valideerimisatribuutide `required`, `maxlength` ja `min` kasutuselevõttu
- **Kasutanud** `type="number"` väljal saldo jaoks koos kümnendkoha toega
### Sisendi tüüpide ja käitumise uurimine
**Moodsaid sisendi tüüpe iseloomustab täiustatud funktsionaalsus:**
| Omadus | Eelis | Näide |
|--------|-------|--------|
| `type="number"` | Numbriline klaviatuur mobiilil | Lihtsam saldod sisestada |
| `step="0.01"` | Kümnendkoha täpsus | Lubab sendide kasutamist valuutas |
| `autocomplete` | Brauseri automaatne täitmine | Kiirem vormi täitmine |
| `placeholder` | Kontekstuaalsed vihjed | Juhendab kasutaja ootusi |
> 🎯 **Ligipääsetavuse väljakutse**: Proovige vorme navigeerida ainult klaviatuuri abil! Kasutage `Tab`, et liikuda väljade vahel, `Space` kasti märkimiseks ja `Enter` vormi esitamiseks. See kogemus aitab mõista, kuidas ekraanilugeritega kasutajad vorme kasutavad.
### 🔄 **Pedagoogiline kontroll**
**Vormi aluste mõistmine**: Enne JavaScripti rakendamist veenduge, et mõistate:
- ✅ Kuidas semantiline HTML loob ligipääsetava vormistruktuuri
- ✅ Miks sisenditüübid on olulised mobiilsete klaviatuuride ja valideerimise jaoks
- ✅ Siltide ja vormikontrollide vahelist seost
- ✅ Kuidas vormi atribuudid mõjutavad brauseri vaikimisi käitumist
**Kiire enese-Test**: Mis juhtub, kui esitate vormi ilma JavaScriptita?
*Vastus: Brauser täidab vaikimisi esituse, tavaliselt suunates tegevuse URL-ile*
**HTML5 vormide eelised**: Moodsad vormid pakuvad:
- **Sisseehitatud valideerimist**: Automaatne e-posti ja numbrivormingu kontroll
- **Mobiilioptimeerimist**: Sobivad klaviatuurid erinevate sisenditüüpide jaoks
- **Ligipääsetavust**: Ekraanilugerite tugi ja klaviatuuriga navigatsioon
- **Progressiivset täiustamist**: Töötab ka siis, kui JavaScript on keelatud
## Vormide esitamise meetodite mõistmine
Kui keegi täidab teie vormi ja vajutab esita, peab see info kuhugi minema – tavaliselt serverisse, mis selle salvestab. On mitmeid viise, kuidas seda teha, ja teadmine, millist kasutada, võib teid tulevikus peavalude eest kaitsta.
Vaatame, mis tegelikult juhtub, kui vajutatakse nuppu "esita".
### Vaikimisi vormi käitumine
Esiteks vaatleme, mis juhtub lihtsa vormi esitamisega:
**Testige oma olemasolevaid vorme:**
1. Klõpsake vormis *Registreeri* nuppu
2. Jälgige muudatusi oma brauseri aadressireal
3. Märkake, kuidas leht laaditakse uuesti ja andmed ilmuvad aadressireale

### HTTP meetodite võrdlus
```mermaid
graph TD
A[Vormide esitamine] --> B{HTTP meetod}
B -->|GET| C[Andmed URL-is]
B -->|POST| D[Andmed päringukehas]
C --> E[Kuval aadressiribal]
C --> F[Piiratud andmesuurus]
C --> G[Saab järjehoidjaks teha]
D --> H[Peidetud URL-ist]
D --> I[Suur andmekandma]
D --> J[Turvalisem]
```
**Erinevuste mõistmine:**
| Meetod | Kasutusjuhtum | Andmete asukoht | Turvalisuse tase | Suuruse piirang |
|--------|---------------|-----------------|------------------|-----------------|
| `GET` | Otsingupäringud, filtrid | URL parameetrid | Madal (nähtav) | ~2000 märki |
| `POST` | Kasutajakontod, tundlik info | Päringu keha | Kõrge (peidetud) | Praktiliselt piiramatult |
**Põhitõdede mõistmine:**
- **GET**: Lisab vormi andmed aadressirea parameetritena (sobib otsinguteks)
- **POST**: Sisestab andmed päringu kehasse (hädavajalik tundlike andmete jaoks)
- **GET piirangud**: Suuruse piirangud, nähtav info, brauseri ajaloo salvestamine
- **POST eelised**: Suur mõõt, privaatsus, failide üleslaadimise tugi
> 💡 **Parim tava**: Kasuta `GET` otsingu- ja filtrivormide tarbeks (andmete pärimine), kasuta `POST` kasutajate registreerimiseks, sisselogimiseks ja andmete loomiseks.
### Vormiesituse konfigureerimine
Seadistame oma registreerimisvormi, et see korrektselt suhtleks tagapõhja API-ga POST meetodiga:
```html
```
**Täiustatud valideerimise mõistmine:**
- **Ühendab** kohustuslike väljade näitajad kasulike kirjeldustega
- **Sisaldab** `pattern` atribuute vormingu kontrolliks
- **Pakub** `title` atribuute ligipääsetavuse ja tööriistavihjetena
- **Lisab** abitekste kasutajate juhendamiseks
- **Kasutab** semantilist HTML struktuuri parema ligipääsetavuse nimel
### Täiustatud valideerimise reeglid
**Mida iga invalideerimisreegel saavutab:**
| Väli | Valideerimisreeglid | Kasutaja kasu |
|-------|---------------------|---------------|
| Kasutajanimi | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | Tagab kehtivad ja unikaalsed ID-d |
| Valuuta | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | Võtab vastu tavalised valuutasümbolid |
| Saldo | `min="0"`, `step="0.01"`, `type="number"` | Väldib negatiivset saldot |
| Kirjeldus | `maxlength="100"` | Mõistlik pikkuspiirang |
### Valideerimise käitumise testimine
**Proovige järgmisi valideerimissituatsioone:**
1. **Esitage** vorm tühjade kohustuslike väljadega
2. **Sisestage** kasutajanimi, mis on lühem kui 3 tähemärki
3. **Sisestage** kasutajanime välja erimärgid
4. **Sisestage** negatiivne saldosumma

**Mida täheldate:**
- **Brauser kuvab** oma staatilisi valideerimissõnumeid
- **Stiilimuudatused** vastavalt `:valid` ja `:invalid` olekule
- **Vormi esitamine** blokeeritakse seni, kuni kõik valideerimised läbivad
- **Fookus liigub** automaatselt esimesele vigasele väljale
### Klient- vs serveripoolne valideerimine
```mermaid
graph LR
A[Kliendipoolne valideerimine] --> B[Viivitamatu tagasiside]
A --> C[Parem kasutajakogemus]
A --> D[Vähendatud serverikoormus]
E[Serveripoolne valideerimine] --> F[Turvalisus]
E --> G[Andmete terviklikkus]
E --> H[Ärireeglid]
A -.-> I[Mõlemad vajalikud]
E -.-> I
```
**Miks vajate mõlemat kihti:**
- **Klientpoolne valideerimine**: Kohene tagasiside ja parem kasutajakogemus
- **Serveripoolne valideerimine**: Tagab turvalisuse ja haldab keerukaid ärireegleid
- **Kombineeritud lähenemine**: Loob tugeva, kasutajasõbraliku ja turvalise rakenduse
- **Progressiivne täiendus**: Töötav ka JavaScripti puudumisel
> 🛡️ **Turvatähelepanu**: Ärge usaldage ainult klientpoolselt valideerimist! Pahatahtlikud kasutajad võivad kliendipooli kontrollidest mööda minna, seega on serveripoolne valideerimine oluline turvalisuse ja andmete terviklikkuse tagamiseks.
### ⚡ **Mida saad teha järgmise 5 minutiga**
- [ ] Testi vormi vigaste andmetega, et näha valideerimissõnumeid
- [ ] Proovi vormi esitamist JavaScripti keelatuna, et näha HTML5 valideerimist
- [ ] Ava brauseri DevTools ja vaata serverisse edastatud vormiandmeid
- [ ] Katseta erinevaid sisenditüüpe mobiilse klaviatuuri muutuste nägemiseks
### 🎯 **Mida saad selle tunniga saavutada**
- [ ] Täida postitunniküsimustik ja mõista vormihalduse põhimõtteid
- [ ] Rakenda põhjalik valideerimisülesanne reaalajas tagasisidega
- [ ] Lisa CSS stiilid professionaalse väljanägemisega vormidele
- [ ] Loo veahaldus korduvate kasutajanimede ja serveri vigade jaoks
- [ ] Lisa parooli kinnitamise väljad sobiva valideerimisega
### 📅 **Sinu nädala pikkune vormioskuste teekond**
- [ ] Valmista täisfunktsionaalne pangarakendus koos täiustatud vormifunktsioonidega
- [ ] Lisa failide üleslaadimise võimalused profiilipiltide või dokumentide jaoks
- [ ] Loo mitmeastmelised vormid edenemisnäitajate ja oleku haldusega
- [ ] Arenda dünaamilisi vorme, mis kohanevad kasutajavalikute järgi
- [ ] Rakenda vormi automaatne salvestamine ja taastamine parema kasutajakogemuse nimel
- [ ] Lisa täiendavad valideerimised nagu e-posti ja telefoni numbri kontroll
### 🌟 **Sinu kuu pikkune frontendi arendamise meisterlikkus**
- [ ] Arenda keerukaid vormirakendusi tingimusliku loogika ja töövoogudega
- [ ] Õpi vormiraamatukogusid ja raamistikke kiireks arendamiseks
- [ ] Valda ligipääsetavuse suuniseid ja kaasavat disaini põhimõtteid
- [ ] Rakenda rahvusvahelistumist ja lokaliseerimist globaalselt kasutatavate vormide jaoks
- [ ] Loo taaskasutatavaid vormikomponentide raamatukogusid ja disainisüsteeme
- [ ] Panusta avatud lähtekoodiga vormiprojektidesse ja jaga parimaid praktikaid
## 🎯 Sinu vormiarenduse meistriklassi ajaskaala
```mermaid
timeline
title Vormide arendamine ja kasutajakogemuse õppimise areng
section HTML alus (15 minutit)
Semantilised vormid: Vormielemendid
: Sisenditüübid
: Sildid ja ligipääsetavus
: Progressiivne täiustamine
section JavaScripti integratsioon (25 minutit)
Sündmuste haldamine: Vormide esitamine
: Andmete kogumine
: AJAX kommunikatsioon
: Async/await mustrid
section Kinnitussüsteemid (35 minutit)
Mitmetasandiline turvalisus: HTML5 valideerimine
: Kliendipoolne loogika
: Serveripoolne kontroll
: Veahaldus
section Kasutajakogemus (45 minutit)
Liidese lihvimine: Laadimisolekud
: Edu sõnumid
: Vigade taastumine
: Ligipääsetavuse funktsioonid
section Täiustatud mustrid (1 nädal)
Professionaalsed vormid: Dünaamiline valideerimine
: Mitmeastmelised töövood
: Faili üleslaadimised
: Reaalajas tagasiside
section Ettevõtte oskused (1 kuu)
Tootmisrakendused: Vormiteegid
: Testimisstrateegiad
: Tulemuslikkuse optimeerimine
: Turvalisuse parimad tavad
```
### 🛠️ Sinu vormiarenduse tööriistakomplekti kokkuvõte
Selle õppetunni läbimise järel oled omandanud:
- **HTML5 vormid**: Semantiline struktuur, sisenditüübid ja ligipääsetavusfunktsioonid
- **JavaScripti vormihaldus**: Sündmuste haldus, andmete kogumine ja AJAX suhtlus
- **Valideerimise arhitektuur**: Mitmekihiline valideerimine turvalisuse ja kasutajakogemuse jaoks
- **Asünkroonne programmeerimine**: Kaasaegne fetch API ja async/await mustrid
- **Veahalduse juhtimine**: Põhjalik veahaldus ja kasutajate tagasiside süsteemid
- **Kasutajakogemuse disain**: Laadimisolekud, õnnestumise teated ja vigade taastamine
- **Progressiivne täiendus**: Vormid, mis töötavad kõigis brauserites ja keskkondades
**Rakendused pärismaailmas**: Sinu vormiarenduse oskused kehtivad otseselt:
- **E-kaubanduse rakendused**: Kassa protsessid, konto registreerimine ja maksevormid
- **Ettevõtterakendused**: Andmesisestussüsteemid, aruandeliidesed ja töövoogude rakendused
- **Sisutõrjesüsteemid**: Avaldamise platvormid, kasutajate loodud sisu ja haldusliidesed
- **Finantsrakendused**: Panga liidesed, investeerimisplatvormid ja tehingute süsteemid
- **Tervishoiusüsteemid**: Patsientide portaalid, aja planeerimine ja meditsiinilised vormid
- **Haridusplatvormid**: Kursuse registreerimine, hindamisvahendid ja õppehaldussüsteemid
**Sinu professionaalsed oskused**: Nüüd saad:
- **Disainida** ligipääsetavaid vorme, mis töötavad kõigi kasutajate, sealhulgas erivajadustega inimeste jaoks
- **Rakendada** turvalist vormi valideerimist, mis väldib andmekorruptsiooni ja turvaohtusid
- **Luua** reageerivaid kasutajaliideseid, mis annavad selget tagasisidet ja juhiseid
- **Siluda** keerukaid vormi interaktsioone brauseri arendajatööriistade ja võrguanalüüsi abil
- **Optimeerida** vormi jõudlust tõhusa andmetöötluse ja valideerimisstrateegiatega
**Frontendi arenduse mõisted valdavad:**
- **Sündmuspõhine arhitektuur**: Kasutajate interaktsioonide haldus ja vastusmehhanismid
- **Asünkroonne programmeerimine**: Mitteblokeeriv serverisuhtlus ja veahaldus
- **Andmete valideerimine**: Kliendi- ja serveripoolne turvalisuse ning terviklikkuse kontroll
- **Kasutajakogemuse disain**: Intuitiivsed liidesed, mis juhivad kasutajaid eduni
- **Ligipääsetavuse inseneritöö**: Kaasav disain, mis sobib erinevate kasutajate vajadustele
**Järgmine tase**: Oled valmis uurima täiustatud vormiraamatukogusid, rakendama keerukaid valideerimisreegleid või ehitama ettevõtte tasemel andmekogumise süsteeme!
🌟 **Saavutus saavutatud**: Oled loonud täieliku vormihaldussüsteemi professionaalse valideerimise, veahalduse ja kasutajakogemuse mustritega!
---
---
## GitHub Copilot agentide väljakutse 🚀
Kasuta Agent-režiimi, et lõpetada järgmine ülesanne:
**Kirjeldus:** Täienda registreerimisvormi täieliku kliendipoolse valideerimise ja kasutajate tagasisidega. See väljakutse aitab sul harjutada vormi valideerimist, veahaldust ja kasutajakogemuse parandamist interaktiivse tagasisidega.
**Prompt:** Loo registreerimisvormile täielik valideerimissüsteem, mis sisaldab: 1) Reaalajas valideerimispalautust iga välja kohta, kui kasutaja kirjutab, 2) Kohandatud valideerimissõnumeid, mis kuvatakse iga sisestusvälja all, 3) Parooli kinnitamise väli, millel on sobivuse valideerimine, 4) Visuaalsed näidikud (nt rohelised linnukesed kehtivate väljade jaoks ja punased hoiatused kehtetute jaoks), 5) Esitamisnupp, mis aktiveerub ainult siis, kui kõik valideerimised on läbitud. Kasuta HTML5 valideerimisatribuute, CSS-i valideerimisolekute kujundamiseks ja JavaScripti interaktiivseks käitumiseks.
Lisateave saada agentrežiimi kohta aadressil [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode).
## 🚀 Väljakutse
Kuva HTML-is veateade, kui kasutaja juba eksisteerib.
Näide sellest, kuidas lõplik sisselogimisleht võib välja näha pärast veidi kujundamist:

## Loengujärgne viktoriin
[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/44)
## Kordamine ja iseseisev õpe
Arendajad on olnud väga loovad oma vormide loomisel, eriti valideerimisstrateegiate osas. Uuri erinevaid vormivoogusid, sirvides [CodePen](https://codepen.com); kas suudad leida mõnda huvitavat ja inspireerivat vormi?
## Kodutöö
[Stiliseeri oma pangarakendus](assignment.md)
---
**Lahtiütlus**:
See dokument on tõlgitud kasutades tehisintellekti tõlketeenust [Co-op Translator](https://github.com/Azure/co-op-translator). Kuigi püüame tagada täpsust, võib automaatsetes tõlgetes esineda vigu või ebatäpsusi. Originaaldokument selle emakeeles tuleks pidada usaldusväärseks allikaks. Kriitilise teabe puhul soovitatakse professionaalset inimtõlget. Meie ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valesti mõistmiste eest.