📝 Lesson 54: Django Forms (User Input Handling)
1. What is a Django Form?
In short → A Django Form is a class that receives user input and validates it. It can auto-generate an HTML form, with validation rules built right in.
English → A Django Form is a class that handles user input, validation, and rendering HTML forms.
2. Why Use Django Forms?
- Auto-generates the HTML form for you
- Comes with built-in validation (required fields, data type checks)
- Includes built-in security (CSRF protection)
3. Summary
✅ Django Form = a system for handling user input
✅ Comes with built-in validation + CSRF protection
✅ Form rendering → {{ form.as_p }}
✅ ModelForm → hook it up to a model for 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)