from django.urls import reverse
from django.views.generic import DetailView, ListView, RedirectView, UpdateView
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import User
[docs]class UserDetailView(LoginRequiredMixin, DetailView):
model = User
# These next two lines tell the view to index lookups by username
slug_field = "username"
slug_url_kwarg = "username"
[docs]class UserRedirectView(LoginRequiredMixin, RedirectView):
permanent = False
[docs] def get_redirect_url(self):
return reverse("users:detail", kwargs={"username": self.request.user.username})
[docs]class UserUpdateView(LoginRequiredMixin, UpdateView):
fields = ["display_name", "bio", "homepage_url"]
# we already imported User in the view code above, remember?
model = User
# send the user back to their own page after a successful update
[docs] def get_success_url(self):
return reverse("users:detail", kwargs={"username": self.request.user.username})
[docs] def get_object(self):
# Only get the User record for the user making the request
return User.objects.get(username=self.request.user.username)
[docs]class UserListView(LoginRequiredMixin, ListView):
model = User
# These next two lines tell the view to index lookups by username
slug_field = "username"
slug_url_kwarg = "username"