Thuta Learning
IntermediateProgrammingbeginner

Django Forms

Relax. We'll talk through this in plain words โ€” no textbook voice.

๐Ÿ“ 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)