🎯 Subject
Learn how to use Django Forms to handle user input, validate data, and connect forms with models to build interactive web applications.
🧠 1. What Is a Django Form?
A Django form is a tool that allows users to send data to your application (like filling a form on a website).
Examples:
- contact form
- login form
- registration form
- blog post creation form
👉 Forms are essential for user interaction.
🔄 2. How Forms Work
User → fills form → submits → Django processes → responseSteps:
- user fills input fields
- form sends data (POST request)
- Django validates data
- Django saves or processes data
- response is returned
🧩 3. Types of Django Forms
1️⃣ Form (Manual)
You define fields manually.
2️⃣ ModelForm (Automatic) ✅
Django generates form from a model.
👉 For beginners → use ModelForm
🧱 4. Creating Your First Form
📌 blog/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)🎯 5. Using the Form in a View
📌 views.py
from django.shortcuts import render
from .forms import ContactForm
def contact(request):
form = ContactForm()
return render(request, 'blog/contact.html', {'form': form})🎨 6. Display Form in Template
📌 contact.html
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Send</button>
</form>🔐 7. Why {% csrf_token %}?
Django protects forms from attacks.
👉 Always include:
{% csrf_token %}📥 8. Handling Form Submission (POST)
Update your view:
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
data = form.cleaned_data
print(data) # process data
else:
form = ContactForm()
return render(request, 'blog/contact.html', {'form': form})🧠 9. Form Validation
Django automatically validates:
- required fields
- email format
- max length
Example:
forms.EmailField()
👉 invalid email → error automatically shown
🧾 10. Accessing Form Data
After validation:
form.cleaned_dataExample:
name = form.cleaned_data['name']🔁 11. ModelForm (Most Important)
Instead of writing fields manually, Django can generate forms from models.
📌 Example Model
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()📌 Create ModelForm
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'content']💾 12. Saving Form Data
In your view:
def create_post(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
form.save()
else:
form = PostForm()
return render(request, 'blog/form.html', {'form': form})👉 form.save() → saves to database
🔄 13. Update Existing Data
def update_post(request, id):
post = Post.objects.get(id=id)
form = PostForm(request.POST or None, instance=post)
if form.is_valid():
form.save()
return render(request, 'blog/form.html', {'form': form})🎨 14. Customize Form Fields
title = forms.CharField(
max_length=200,
widget=forms.TextInput(attrs={'class': 'form-control'})
)❗ 15. Display Errors in Template
{{ form.errors }}Or:
{{ form.field.errors }}⚠️ 16. Common Mistakes
❌ Forgetting {% csrf_token %}
❌ Not checking form.is_valid()
❌ Using GET instead of POST
❌ Not passing request.POST
❌ Forgetting instance for update
🧠 17. Best Practices
✔ Use ModelForm for database models
✔ Always validate forms
✔ Keep forms simple
✔ Use POST for forms
✔ Use clean UI
📊 18. Summary
| Concept | Description |
|---|---|
| Form | Collect user input |
| ModelForm | Auto form from model |
| POST | Send data |
| is_valid() | Validate |
| cleaned_data | Access data |
| save() | Store data |
🎯 19. Conclusion
🔥 Forms are a major milestone in Django.
Now you can:
- accept user input
- build interactive apps
- create real features (login, register, comments)
💬 Comments
No comments yet. Be the first to comment!
Login to comment.