π― 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.