# बँकिंग अॅप तयार करा भाग 2: लॉगिन आणि नोंदणी फॉर्म तयार करा
## पूर्व-व्याख्यान प्रश्नमंजुषा
[पूर्व-व्याख्यान प्रश्नमंजुषा](https://ff-quizzes.netlify.app/web/quiz/43)
कधी ऑनलाइन फॉर्म भरताना तुमचा ईमेल फॉर्मेट चुकीचा असल्याचे सांगितले आहे का? किंवा सबमिट क्लिक केल्यावर सर्व माहिती गमावली आहे का? आपण सर्वांनी अशा त्रासदायक अनुभवांना सामोरे गेले आहे.
फॉर्म हे तुमच्या वापरकर्त्यांना आणि तुमच्या अॅप्लिकेशनच्या कार्यक्षमतेला जोडणारे पूल आहेत. जसे विमानतळ नियंत्रक विमानांना त्यांच्या गंतव्यस्थानी सुरक्षितपणे पोहोचवण्यासाठी काळजीपूर्वक प्रोटोकॉल वापरतात, तसेच चांगल्या प्रकारे डिझाइन केलेले फॉर्म स्पष्ट अभिप्राय देतात आणि महागड्या चुका टाळतात. दुसरीकडे, खराब फॉर्म वापरकर्त्यांना वेगाने दूर करू शकतात.
या धड्यात, आपण तुमचे स्थिर बँकिंग अॅप एक परस्परसंवादी अॅप्लिकेशनमध्ये रूपांतरित करू. तुम्ही वापरकर्त्याच्या इनपुटची पडताळणी करणारे, सर्व्हरशी संवाद साधणारे आणि उपयुक्त अभिप्राय देणारे फॉर्म तयार करणे शिकाल. याला वापरकर्त्यांना तुमच्या अॅप्लिकेशनच्या वैशिष्ट्यांमध्ये नेव्हिगेट करण्यास अनुमती देणारे नियंत्रण इंटरफेस तयार करणे असे समजून घ्या.
शेवटी, तुमच्याकडे एक संपूर्ण लॉगिन आणि नोंदणी प्रणाली असेल ज्यामध्ये वापरकर्त्यांना निराशा न होता यशाकडे मार्गदर्शन करणारी पडताळणी असेल.
## पूर्वापेक्षित गोष्टी
फॉर्म तयार करण्यास सुरुवात करण्यापूर्वी, तुमच्याकडे सर्व काही योग्य प्रकारे सेट केले आहे याची खात्री करूया. हा धडा आपण मागील धड्याच्या शेवटी जिथे सोडला होता तिथून सुरू होतो, त्यामुळे जर तुम्ही पुढे गेले असाल तर तुम्हाला परत जाऊन मूलभूत गोष्टी प्रथम कार्यरत कराव्या लागतील.
### आवश्यक सेटअप
| घटक | स्थिती | वर्णन |
|-----------|--------|-------------|
| [HTML टेम्पलेट्स](../1-template-route/README.md) | ✅ आवश्यक | तुमचे मूलभूत बँकिंग अॅप स्ट्रक्चर |
| [Node.js](https://nodejs.org) | ✅ आवश्यक | सर्व्हरसाठी JavaScript रनटाइम |
| [बँक API सर्व्हर](../api/README.md) | ✅ आवश्यक | डेटा स्टोरेजसाठी बॅकएंड सेवा |
> 💡 **विकास टिप**: तुम्ही दोन स्वतंत्र सर्व्हर एकाच वेळी चालवणार आहात – एक तुमच्या फ्रंट-एंड बँकिंग अॅपसाठी आणि दुसरा बॅकएंड API साठी. ही सेटअप वास्तविक-जगातील विकासाचे प्रतिबिंब आहे जिथे फ्रंटएंड आणि बॅकएंड सेवा स्वतंत्रपणे कार्य करतात.
### सर्व्हर कॉन्फिगरेशन
**तुमच्या विकास वातावरणात समाविष्ट असेल:**
- **फ्रंटएंड सर्व्हर**: तुमचे बँकिंग अॅप सर्व्ह करतो (सामान्यतः पोर्ट `3000`)
- **बॅकएंड API सर्व्हर**: डेटा स्टोरेज आणि पुनर्प्राप्ती हाताळतो (पोर्ट `5000`)
- **दोन्ही सर्व्हर** कोणत्याही संघर्षाशिवाय एकाच वेळी चालवू शकतात
**तुमच्या API कनेक्शनची चाचणी करणे:**
```bash
curl http://localhost:5000/api
# Expected response: "Bank API v1.0.0"
```
**जर तुम्हाला API आवृत्ती प्रतिसाद दिसला, तर तुम्ही पुढे जाण्यास तयार आहात!**
---
## HTML फॉर्म आणि नियंत्रण समजून घेणे
HTML फॉर्म हे तुमच्या वेब अॅप्लिकेशनशी संवाद साधण्याचा वापरकर्त्यांचा मार्ग आहे. त्यांना 19व्या शतकातील दूरस्थ ठिकाणांना जोडणाऱ्या टेलिग्राफ सिस्टमप्रमाणे समजून घ्या – ते वापरकर्त्याच्या हेतू आणि अॅप्लिकेशन प्रतिसाद यांच्यातील संवाद प्रोटोकॉल आहेत. विचारपूर्वक डिझाइन केलेले असल्यास, ते चुका पकडतात, इनपुट फॉर्मेटिंग मार्गदर्शन करतात आणि उपयुक्त सूचना देतात.
आधुनिक फॉर्म मूलभूत टेक्स्ट इनपुटपेक्षा लक्षणीय अधिक प्रगत आहेत. HTML5 ने विशेष इनपुट प्रकार सादर केले जे ईमेल पडताळणी, क्रमांक फॉर्मेटिंग आणि तारीख निवड आपोआप हाताळतात. या सुधारणा अॅक्सेसिबिलिटी आणि मोबाइल वापरकर्ता अनुभव दोन्हींसाठी फायदेशीर आहेत.
### आवश्यक फॉर्म घटक
**प्रत्येक फॉर्मला आवश्यक असलेले बिल्डिंग ब्लॉक्स:**
```html
```
**या कोडमध्ये काय होते:**
- **तयार करते** एक फॉर्म कंटेनर ज्याला एक अद्वितीय आयडेंटिफायर आहे
- **निर्दिष्ट करते** डेटा सबमिशनसाठी HTTP पद्धत
- **जोडते** लेबल्स इनपुटशी अॅक्सेसिबिलिटीसाठी
- **परिभाषित करते** एक सबमिट बटण फॉर्म प्रक्रिया करण्यासाठी
### आधुनिक इनपुट प्रकार आणि गुणधर्म
| इनपुट प्रकार | उद्देश | उदाहरण वापर |
|------------|---------|---------------|
| `text` | सामान्य टेक्स्ट इनपुट | `` |
| `email` | ईमेल पडताळणी | `` |
| `password` | लपवलेला टेक्स्ट एंट्री | `` |
| `number` | संख्यात्मक इनपुट | `` |
| `tel` | फोन नंबर | `` |
> 💡 **आधुनिक HTML5 फायदा**: विशिष्ट इनपुट प्रकार वापरणे आपोआप पडताळणी, योग्य मोबाइल कीबोर्ड आणि अतिरिक्त JavaScript शिवाय चांगले अॅक्सेसिबिलिटी समर्थन प्रदान करते!
### बटण प्रकार आणि वर्तन
```html
```
**प्रत्येक बटण प्रकार काय करतो:**
- **सबमिट बटणे**: फॉर्म सबमिशन ट्रिगर करतात आणि डेटा निर्दिष्ट केलेल्या एंडपॉइंटवर पाठवतात
- **रीसेट बटणे**: सर्व फॉर्म फील्ड्स त्यांच्या सुरुवातीच्या स्थितीत पुनर्संचयित करतात
- **सामान्य बटणे**: कोणतेही डिफॉल्ट वर्तन प्रदान करत नाहीत, कार्यक्षमतेसाठी सानुकूल JavaScript आवश्यक आहे
> ⚠️ **महत्त्वाची टीप**: `` घटक स्वतः बंद होतो आणि बंद करणारा टॅग आवश्यक नाही. आधुनिक सर्वोत्तम पद्धत म्हणजे `` स्लॅशशिवाय लिहिणे.
### तुमचा लॉगिन फॉर्म तयार करणे
आता आधुनिक HTML फॉर्म पद्धतींचे प्रदर्शन करणारा व्यावहारिक लॉगिन फॉर्म तयार करूया. आपण मूलभूत संरचनेपासून सुरुवात करू आणि अॅक्सेसिबिलिटी वैशिष्ट्ये आणि पडताळणीसह हळूहळू सुधारणा करू.
```html
Bank App
Login
```
**येथे काय होते ते समजून घेणे:**
- **संरचना तयार करते** फॉर्मसाठी सेमॅंटिक HTML5 घटकांसह
- **संबंधित घटक गटबद्ध करते** `div` कंटेनर वापरून अर्थपूर्ण वर्गांसह
- **लेबल्स इनपुटशी जोडते** `for` आणि `id` गुणधर्म वापरून
- **आधुनिक गुणधर्म समाविष्ट करते** जसे की `autocomplete` आणि `placeholder` चांगल्या UX साठी
- **`novalidate` जोडते** ब्राउझर डिफॉल्ट्सऐवजी JavaScript सह पडताळणी हाताळण्यासाठी
### योग्य लेबल्सचे महत्त्व
**आधुनिक वेब विकासासाठी लेबल्स का महत्त्वाचे आहेत:**
```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]
```
**योग्य लेबल्स काय साध्य करतात:**
- **स्क्रीन रीडर्स सक्षम करतात** फॉर्म फील्ड्स स्पष्टपणे जाहीर करण्यासाठी
- **क्लिक करण्यायोग्य क्षेत्र वाढवतात** (लेबलवर क्लिक केल्यावर इनपुटवर लक्ष केंद्रित होते)
- **मोबाइल वापरयोग्यता सुधारतात** मोठ्या टच टार्गेट्ससह
- **फॉर्म पडताळणीस समर्थन देतात** अर्थपूर्ण त्रुटी संदेशांसह
- **SEO सुधारतात** फॉर्म घटकांना सेमॅंटिक अर्थ प्रदान करून
> 🎯 **अॅक्सेसिबिलिटी लक्ष्य**: प्रत्येक फॉर्म इनपुटसाठी संबंधित लेबल असावे. ही साधी पद्धत तुमचे फॉर्म सर्वांसाठी, अपंग वापरकर्त्यांसह, वापरण्यायोग्य बनवते आणि सर्व वापरकर्त्यांसाठी अनुभव सुधारते.
### नोंदणी फॉर्म तयार करणे
नोंदणी फॉर्मला संपूर्ण वापरकर्ता खाते तयार करण्यासाठी अधिक तपशीलवार माहिती आवश्यक आहे. आधुनिक HTML5 वैशिष्ट्ये आणि सुधारित अॅक्सेसिबिलिटीसह ते तयार करूया.
```html
Register
```
**वरीलमध्ये, आम्ही:**
- **प्रत्येक फील्ड व्यवस्थित केले** चांगल्या स्टाइलिंग आणि लेआउटसाठी कंटेनर divs मध्ये
- **योग्य `autocomplete` गुणधर्म जोडले** ब्राउझर ऑटोफिल समर्थनासाठी
- **उपयुक्त `placeholder` मजकूर समाविष्ट केला** वापरकर्त्याच्या इनपुटला मार्गदर्शन करण्यासाठी
- **सामान्य डिफॉल्ट्स सेट केले** `value` गुणधर्म वापरून
- **पडताळणी गुणधर्म लागू केले** जसे की `required`, `maxlength`, आणि `min`
- **`type="number"` वापरले** बॅलन्स फील्डसाठी दशांश समर्थनासह
### इनपुट प्रकार आणि वर्तन एक्सप्लोर करणे
**आधुनिक इनपुट प्रकार सुधारित कार्यक्षमता प्रदान करतात:**
| वैशिष्ट्य | फायदा | उदाहरण |
|---------|---------|----------|
| `type="number"` | मोबाइलवर संख्यात्मक कीपॅड | बॅलन्स एंट्री सोपी |
| `step="0.01"` | दशांश अचूकता नियंत्रण | चलनात सेंट्सला अनुमती देते |
| `autocomplete` | ब्राउझर ऑटोफिल | फॉर्म पूर्ण करणे जलद |
| `placeholder` | संदर्भात्मक सूचना | वापरकर्त्याच्या अपेक्षांना मार्गदर्शन करते |
> 🎯 **अॅक्सेसिबिलिटी आव्हान**: फक्त तुमच्या कीबोर्डचा वापर करून फॉर्म नेव्हिगेट करण्याचा प्रयत्न करा! फील्ड्समध्ये जाण्यासाठी `Tab` वापरा, चेक बॉक्ससाठी `Space` वापरा आणि सबमिट करण्यासाठी `Enter` वापरा. हा अनुभव तुम्हाला स्क्रीन रीडर वापरकर्ते तुमच्या फॉर्मशी कसे संवाद साधतात हे समजण्यास मदत करतो.
## फॉर्म सबमिशन पद्धती समजून घेणे
जेव्हा कोणी तुमचा फॉर्म भरतो आणि सबमिट क्लिक करतो, तेव्हा तो डेटा कुठेतरी जावा लागतो – सामान्यतः सर्व्हरवर जो तो जतन करू शकतो. हे दोन वेगवेगळ्या प्रकारे होऊ शकते आणि कोणता वापरायचा हे जाणून घेणे तुम्हाला नंतर काही डोकेदुखीपासून वाचवू शकते.
चला पाहूया की जेव्हा कोणी सबमिट बटण क्लिक करतो तेव्हा प्रत्यक्षात काय होते.
### डिफॉल्ट फॉर्म वर्तन
प्रथम, मूलभूत फॉर्म सबमिशनसह काय होते ते पाहूया:
**तुमचे वर्तमान फॉर्म तपासा:**
1. तुमच्या फॉर्ममधील *नोंदणी करा* बटणावर क्लिक करा
2. तुमच्या ब्राउझरच्या अॅड्रेस बारमधील बदलांचे निरीक्षण करा
3. पृष्ठ कसे रीलोड होते आणि डेटा URL मध्ये कसा दिसतो ते पहा

### 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]
```
**फरक समजून घेणे:**
| पद्धत | वापर प्रकरण | डेटा स्थान | सुरक्षा स्तर | आकार मर्यादा |
|--------|----------|---------------|----------------|-------------|
| `GET` | शोध क्वेरी, फिल्टर्स | URL पॅरामीटर्स | कमी (दृश्यमान) | ~2000 वर्ण |
| `POST` | वापरकर्ता खाती, संवेदनशील डेटा | विनंती बॉडी | उच्च (लपवलेले) | व्यावहारिक मर्यादा नाही |
**मूलभूत फरक समजून घेणे:**
- **GET**: फॉर्म डेटा URL मध्ये क्वेरी पॅरामीटर्स म्हणून जोडतो (शोध ऑपरेशन्ससाठी योग्य)
- **POST**: डेटा विनंती बॉडीमध्ये समाविष्ट करतो (संवेदनशील माहिती आवश्यक)
- **GET मर्यादा**: आकार मर्यादा, दृश्यमान डेटा, सतत ब्राउझर इतिहास
- **POST फायदे**: मोठ्या डेटा क्षमता, गोपनीयता संरक्षण, फाइल अपलोड समर्थन
> 💡 **सर्वोत्तम पद्धत**: शोध फॉर्म आणि फिल्टर्ससाठी `GET` वापरा (डेटा पुनर्प्राप्ती), वापरकर्ता नोंदणी, लॉगिन आणि डेटा निर्मितीसाठी `POST` वापरा.
### फॉर्म सबमिशन कॉन्फिगर करणे
चला तुमच्या नोंदणी फॉर्मला POST पद्धत वापरून बॅकएंड API शी योग्य प्रकारे संवाद साधण्यासाठी कॉन्फिगर करूया:
```html
```
**सुधारित व्हॅलिडेशन समजून घेणे:**
- **आवश्यक फील्ड इंडिकेटर्स** सह उपयुक्त वर्णन एकत्रित करते
- **`pattern` अॅट्रिब्यूट्स** स्वरूप व्हॅलिडेशनसाठी समाविष्ट करते
- **`title` अॅट्रिब्यूट्स** accessibility आणि टूलटिप्ससाठी प्रदान करते
- **वापरकर्ता इनपुट मार्गदर्शन करण्यासाठी मदत करणारा मजकूर समाविष्ट करते**
- **बेहतर accessibility साठी सेमॅंटिक HTML संरचना वापरते**
### प्रगत व्हॅलिडेशन नियम
**प्रत्येक व्हॅलिडेशन नियम काय साध्य करतो:**
| फील्ड | व्हॅलिडेशन नियम | वापरकर्ता फायदा |
|-------|-----------------|-----------------|
| Username | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | वैध, अद्वितीय ओळख सुनिश्चित करते |
| Currency | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | सामान्य चलन चिन्ह स्वीकारते |
| Balance | `min="0"`, `step="0.01"`, `type="number"` | नकारात्मक शिल्लक टाळते |
| Description | `maxlength="100"` | वाजवी लांबी मर्यादा |
### व्हॅलिडेशन वर्तन तपासणे
**या व्हॅलिडेशन परिस्थितींचा प्रयत्न करा:**
1. **रिक्त आवश्यक फील्डसह फॉर्म सबमिट करा**
2. **3 कॅरेक्टरपेक्षा कमी युजरनेम प्रविष्ट करा**
3. **युजरनेम फील्डमध्ये विशेष कॅरेक्टर वापरण्याचा प्रयत्न करा**
4. **नकारात्मक शिल्लक रक्कम प्रविष्ट करा**

**तुम्ही काय निरीक्षण कराल:**
- **ब्राउझर दाखवतो** नैसर्गिक व्हॅलिडेशन संदेश
- **`valid` आणि `invalid` स्थितींवर आधारित स्टाइलिंग बदलते**
- **सर्व व्हॅलिडेशन पास होईपर्यंत फॉर्म सबमिशन रोखले जाते**
- **फोकस आपोआप** पहिल्या अवैध फील्डवर हलते
### क्लायंट-साइड vs सर्व्हर-साइड व्हॅलिडेशन
```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
```
**तुम्हाला दोन्ही स्तर का आवश्यक आहेत:**
- **क्लायंट-साइड व्हॅलिडेशन**: त्वरित फीडबॅक प्रदान करते आणि वापरकर्ता अनुभव सुधारते
- **सर्व्हर-साइड व्हॅलिडेशन**: सुरक्षा सुनिश्चित करते आणि जटिल व्यवसाय नियम हाताळते
- **संयुक्त दृष्टिकोन**: मजबूत, वापरकर्ता-अनुकूल आणि सुरक्षित अॅप्लिकेशन्स तयार करते
- **प्रोग्रेसिव्ह एन्हांसमेंट**: JavaScript अक्षम असले तरी कार्य करते
> 🛡️ **सुरक्षा स्मरणपत्र**: केवळ क्लायंट-साइड व्हॅलिडेशनवर विश्वास ठेवू नका! दुर्भावनायुक्त वापरकर्ते क्लायंट-साइड तपासण्या टाळू शकतात, त्यामुळे सुरक्षा आणि डेटा अखंडतेसाठी सर्व्हर-साइड व्हॅलिडेशन आवश्यक आहे.
---
---
## GitHub Copilot Agent Challenge 🚀
Agent मोड वापरून खालील आव्हान पूर्ण करा:
**वर्णन:** नोंदणी फॉर्मला सर्वसमावेशक क्लायंट-साइड व्हॅलिडेशन आणि वापरकर्ता फीडबॅकसह सुधारित करा. हे आव्हान तुम्हाला फॉर्म व्हॅलिडेशन, त्रुटी हाताळणी, आणि परस्पर फीडबॅकसह वापरकर्ता अनुभव सुधारण्याचा सराव करण्यास मदत करेल.
**प्रॉम्प्ट:** नोंदणी फॉर्मसाठी संपूर्ण फॉर्म व्हॅलिडेशन प्रणाली तयार करा ज्यामध्ये समाविष्ट आहे: 1) वापरकर्ता टाइप करत असताना प्रत्येक फील्डसाठी रिअल-टाइम व्हॅलिडेशन फीडबॅक, 2) प्रत्येक इनपुट फील्डखाली सानुकूल व्हॅलिडेशन संदेश, 3) पासवर्ड पुष्टीकरण फील्डसह जुळणारे व्हॅलिडेशन, 4) दृश्यात्मक संकेत (जसे की वैध फील्डसाठी हिरवे चेकमार्क आणि अवैध फील्डसाठी लाल चेतावणी), 5) सर्व व्हॅलिडेशन पास झाल्यावरच सक्षम होणारे सबमिट बटण. HTML5 व्हॅलिडेशन अॅट्रिब्यूट्स, CSS स्टाइलिंगसाठी, आणि JavaScript परस्पर वर्तनासाठी वापरा.
[Agent मोड](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) बद्दल अधिक जाणून घ्या.
## 🚀 आव्हान
HTML मध्ये त्रुटी संदेश दाखवा जर वापरकर्ता आधीच अस्तित्वात असेल.
अंतिम लॉगिन पृष्ठ थोड्या स्टाइलिंगनंतर कसे दिसू शकते याचे उदाहरण येथे आहे:

## पोस्ट-लेक्चर क्विझ
[पोस्ट-लेक्चर क्विझ](https://ff-quizzes.netlify.app/web/quiz/44)
## पुनरावलोकन आणि स्व-अभ्यास
डेव्हलपर्स त्यांच्या फॉर्म बिल्डिंग प्रयत्नांबद्दल खूप सर्जनशील झाले आहेत, विशेषतः व्हॅलिडेशन धोरणांबद्दल. [CodePen](https://codepen.com) पाहून वेगवेगळ्या फॉर्म फ्लोबद्दल जाणून घ्या; तुम्हाला काही मनोरंजक आणि प्रेरणादायक फॉर्म सापडतात का?
## असाइनमेंट
[तुमच्या बँक अॅपला स्टाइल करा](assignment.md)
---
**अस्वीकरण**:
हा दस्तऐवज AI भाषांतर सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी, कृपया लक्षात ठेवा की स्वयंचलित भाषांतरे त्रुटी किंवा अचूकतेच्या अभावासह असू शकतात. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी, व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून उद्भवलेल्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.