Learn how to use Django Forms to handle user input, validate data, and connect forms with models to build interactive web applications.
A Django form is a tool that allows users to send data to your application (like filling a form on a website).
๐ Forms are essential for user interaction.
User โ fills form โ submits โ Django processes โ responseSteps:
You define fields manually.
Django generates form from a model.
๐ For beginners โ use ModelForm
blog/forms.pyfrom django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)views.pyfrom django.shortcuts import render
from .forms import ContactForm
def contact(request):
form = ContactForm()
return render(request, 'blog/contact.html', {'form': form})contact.html<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Send</button>
</form>{% csrf_token %}?Django protects forms from attacks.
๐ Always include:
{% csrf_token %}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})Django automatically validates:
forms.EmailField()
๐ invalid email โ error automatically shown
After validation:
form.cleaned_dataExample:
name = form.cleaned_data['name']Instead of writing fields manually, Django can generate forms from models.
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'content']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
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})title = forms.CharField(
max_length=200,
widget=forms.TextInput(attrs={'class': 'form-control'})
){{ form.errors }}Or:
{{ form.field.errors }}โ Forgetting {% csrf_token %}
โ Not checking form.is_valid()
โ Using GET instead of POST
โ Not passing request.POST
โ Forgetting instance for update
โ Use ModelForm for database models
โ Always validate forms
โ Keep forms simple
โ Use POST for forms
โ Use clean UI
| Concept | Description |
|---|---|
| Form | Collect user input |
| ModelForm | Auto form from model |
| POST | Send data |
| is_valid() | Validate |
| cleaned_data | Access data |
| save() | Store data |
๐ฅ Forms are a major milestone in Django.
Now you can: