Project Todo Views
you're building a to-do list application using Django and you want to customize some views for user authentication and task management.
Views of Todo App
Below is the entire views of the todo app:
from django.shortcuts import render, redirect
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView, FormView
from django.urls import reverse_lazy
from django.contrib.auth.views import LoginView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
# Imports for Reordering Feature
from django.views import View
from django.shortcuts import redirect
from django.db import transaction
from .models import Task
from .forms import PositionForm
class CustomLoginView(LoginView):
template_name = 'base/login.html'
fields = '__all__'
redirect_authenticated_user = True
def get_success_url(self):
return reverse_lazy('tasks')
class RegisterPage(FormView):
template_name = 'base/register.html'
form_class = UserCreationForm
redirect_authenticated_user = True
success_url = reverse_lazy('tasks')
def form_valid(self, form):
user = form.save()
if user is not None:
login(self.request, user)
return super(RegisterPage, self).form_valid(form)
def get(self, *args, **kwargs):
if self.request.user.is_authenticated:
return redirect('tasks')
return super(RegisterPage, self).get(*args, **kwargs)
class TaskList(LoginRequiredMixin, ListView):
model = Task
context_object_name = 'tasks'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['tasks'] = context['tasks'].filter(user=self.request.user)
context['count'] = context['tasks'].filter(complete=False).count()
search_input = self.request.GET.get('search-area') or ''
if search_input:
context['tasks'] = context['tasks'].filter(
title__contains=search_input)
context['search_input'] = search_input
return context
class TaskCreate(LoginRequiredMixin, CreateView):
model = Task
fields = ['title', 'description', 'complete']
success_url = reverse_lazy('tasks')
def form_valid(self, form):
form.instance.user = self.request.user
return super(TaskCreate, self).form_valid(form)
class TaskUpdate(LoginRequiredMixin, UpdateView):
model = Task
fields = ['title', 'description', 'complete']
success_url = reverse_lazy('tasks')
class DeleteView(LoginRequiredMixin, DeleteView):
model = Task
context_object_name = 'task'
success_url = reverse_lazy('tasks')
def get_queryset(self):
owner = self.request.user
return self.model.objects.filter(user=owner)
This Django project includes views for handling tasks such as user authentication, task creation, updating, and deletion. The application features a custom login view (CustomLoginView
) and a registration view (RegisterPage
). It utilizes Django's generic class-based views like ListView
, DetailView
, CreateView
, UpdateView
, and DeleteView
to manage tasks. The tasks are associated with users, ensuring that each user only sees their tasks.
Key components:
CustomLoginView: Extends Django's
LoginView
for user authentication. It redirects authenticated users to the 'tasks' page upon successful login.RegisterPage: Extends
FormView
to handle user registration usingUserCreationForm
. After successful registration, users are automatically logged in and redirected to the 'tasks' page.TaskList: Extends
ListView
and requires user login. Displays a list of tasks associated with the logged-in user. Supports filtering tasks by a search input.TaskDetail: Extends
DetailView
and requires user login. Displays details for a specific task.TaskCreate: Extends
CreateView
and requires user login. Allows users to create new tasks.TaskUpdate: Extends
UpdateView
and requires user login. Allows users to update existing tasks.DeleteView: Extends
DeleteView
and requires user login. Allows users to delete tasks, and theget_queryset
method ensures that users can only delete their own tasks.TaskReorder: Extends
View
to handle reordering tasks. Uses a custom form (PositionForm
) to receive the new order of tasks and updates the task order for the current user within a transaction.
Additionally, the application uses a Task
model to represent tasks, and there is a PositionForm
for handling the task reordering feature. The project also includes templates for login, registration, task list, task detail, and task creation.
Note: The get_queryset
method in the DeleteView
class has a typo in the method name. It should be get_object
instead of get_queryset
.
Last updated