Django — New View Checklist
Auth decorators, form/serializer validation, services.py pattern, response handling, error mapping.
Back to Django Checklists
0/0 completed
1. Before You Build
2. View Type Decision
| Use This | When |
|---|---|
Function-based view (def) |
Simple, one-off views with minimal logic |
Class-based view (View, TemplateView, ListView) |
Standard patterns (list, detail, create, update, delete) |
CreateView / UpdateView |
Form-based create and update with Django forms |
ListView / DetailView |
Standard read views |
DeleteView |
Standard delete with confirmation |
DRF APIView or ViewSet |
JSON APIs consumed by React or other frontends |
4. Form & Input Validation
5. Business Logic Placement
This is the most important rule for Django views.
Good Pattern
# views.py
def create_project(request):
form = ProjectForm(request.POST)
if not form.is_valid():
return render(request, 'projects/create.html', {'form': form})
project = ProjectService.create_project(
workspace=request.workspace,
name=form.cleaned_data['name'],
created_by=request.user
)
messages.success(request, 'Project created successfully.')
return redirect('projects:detail', pk=project.pk)
Bad Pattern (logic in view)
# views.py — DO NOT DO THIS
def create_project(request):
name = request.POST.get('name')
slug = name.lower().replace(' ', '-')
if Project.objects.filter(slug=slug).exists():
# ...
project = Project.objects.create(name=name, slug=slug, ...)
send_email(request.user, 'project_created', project)
AuditLog.objects.create(...)
return redirect(...)
6. Response Handling
For HTML Views (Template)
For REST API Views (JSON)
7. Error Handling
8. Reusability & Code Organization
9. Testing Requirements
Before Marking Done
10. Django View Checklist — Before Marking Done
Auth & Permissions
Form/Validation
Business Logic
Response
Error Handling & Testing
Practice Task
Apply what you learned by building a real view with a reusable permission mixin, form validation, and a service layer. Covers: LoginRequiredMixin, WorkspaceMemberMixin, ProjectForm with cross-field date validation, ProjectService.create_project(), POST→redirect→GET pattern.
Open Task 01: Build a Project List & Create View