📝 Lesson 54: Django Forms (User Input Handling)
1. Django Form ဆိုတာဘာလဲ?
မြန်မာ → Django Form ဆိုတာ user input ကို လက်ခံပြီး validate လုပ်ပေးတဲ့ class တစ်ခု။ HTML form ကို auto-generate လုပ်ပေးနိုင်ပြီး, validation rules တွေကို built-in ထည့်ပေးထားတယ်။
English → A Django Form is a class that handles user input, validation, and rendering HTML forms.
2. Why Use Django Forms?
- HTML form ကို auto-generate လုပ်ပေးတယ်
- Validation (required fields, data type check) ကို built-in ထည့်ပေးတယ်
- Security (CSRF protection) ပါပြီးသား
3. အကျဉ်းချုပ်
✅ Django Form = user input handling system
✅ Built-in validation + CSRF protection ပါပြီးသား
✅ Form rendering → {{ form.as_p }}
✅ ModelForm → model နဲ့ ချိတ်ပြီး auto-save လုပ်နိုင်တယ်
python
# ===== 1. Basic Form Example =====
print("===== forms.py =====")
print("from django import forms")
print("")
print("class ContactForm(forms.Form):")
print(" name = forms.CharField(max_length=100)")
print(" email = forms.EmailField()")
print(" message = forms.CharField(widget=forms.Textarea)")
# ===== 2. Using Form in Views =====
print(f"\n===== views.py =====")
print("from django.shortcuts import render")
print("from .forms import ContactForm")
print("")
print("def contact(request):")
print(" if request.method == 'POST':")
print(" form = ContactForm(request.POST)")
print(" if form.is_valid():")
print(" name = form.cleaned_data['name']")
print(" email = form.cleaned_data['email']")
print(" message = form.cleaned_data['message']")
print(" # Save to database or send email")
print(" else:")
print(" form = ContactForm()")
print(" return render(request, 'contact.html', {'form': form})")
# ===== 3. Template Rendering =====
print(f"\n===== contact.html =====")
print("<!DOCTYPE html>")
print("<html>")
print("<body>")
print(" <h2>Contact Form</h2>")
print(" <form method='post'>")
print(" {% csrf_token %}")
print(" {{ form.as_p }}")
print(" <button type='submit'>Send</button>")
print(" </form>")
print("</body>")
print("</html>")
# ===== 4. ModelForm Example =====
print(f"\n===== ModelForm =====")
print("# forms.py")
print("from django import forms")
print("from .models import Task")
print("")
print("class TaskForm(forms.ModelForm):")
print(" class Meta:")
print(" model = Task")
print(" fields = ['title', 'completed']")
print("")
print("# views.py")
print("def add_task(request):")
print(" if request.method == 'POST':")
print(" form = TaskForm(request.POST)")
print(" if form.is_valid():")
print(" form.save() # Auto-save to database")
print(" else:")
print(" form = TaskForm()")
print(" return render(request, 'add_task.html', {'form': form})")
# ===== 5. Real-World Use Cases =====
print(f"\n===== Use Cases =====")
print("✅ Contact form (user feedback)")
print("✅ Registration form (username, password, email)")
print("✅ Blog post form (title, content, tags)")
print("✅ E-commerce checkout form (address, payment info)")You should see
===== forms.py ===== from django import forms class ContactForm(forms.Form): name = forms.CharField(max_length=100) email = forms.EmailField() message = forms.CharField(widget=forms.Textarea) ===== views.py ===== from django.shortcuts import render from .forms import ContactForm def contact(request): if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid(): name = form.cleaned_data['name'] email = form.cleaned_data['email'] message = form.cleaned_data['message'] # Save to database or send email else: form = ContactForm() return render(request, 'contact.html', {'form': form}) ===== contact.html ===== Contact Form {% csrf_token %} {{ form.as_p }} Send ===== ModelForm ===== # forms.py from django import forms from .models import Task class TaskForm(forms.ModelForm): class Meta: model = Task fields = ['title', 'completed'] # views.py def add_task(request): if request.method == 'POST': form = TaskForm(request.POST) if form.is_valid(): form.save() # Auto-save to database else: form = TaskForm() return render(request, 'add_task.html', {'form': form}) ===== Use Cases ===== ✅ Contact form (user feedback) ✅ Registration form (username, password, email) ✅ Blog post form (title, content, tags) ✅ E-commerce checkout form (address, payment info)