Coverage for accounts/views.py: 100.00%

27 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-14 19:27 -0700

1"""Views for djapi-library user accounts.""" 

2 

3from django.contrib.auth import get_user_model 

4from django.contrib.auth.mixins import LoginRequiredMixin 

5from django.urls import reverse, reverse_lazy 

6from django.views.generic import ( 

7 CreateView, 

8 DetailView, 

9 RedirectView, 

10 UpdateView, 

11) 

12 

13from .forms import CustomUserCreationForm 

14 

15User = get_user_model() 

16 

17 

18class SignupPageView(CreateView): 

19 form_class = CustomUserCreationForm 

20 success_url = reverse_lazy("account_login") 

21 template_name = "account/signup.html" 

22 

23 

24class UserDetailView(LoginRequiredMixin, DetailView): 

25 """Tell the view to index lookups by username.""" 

26 

27 model = User 

28 slug_field = "username" 

29 slug_url_kwarg = "username" 

30 

31 template_name = "account/user_detail.html" 

32 

33 

34class UserUpdateView(LoginRequiredMixin, UpdateView): 

35 fields = [ 

36 "name", 

37 "bio", 

38 "country", 

39 "profile_pic", 

40 ] 

41 model = User 

42 

43 def get_success_url(self): 

44 """Send the user back to their own page after a successful update.""" 

45 return reverse( 1bc

46 "user_detail", 

47 kwargs={"username": self.request.user.username}, 

48 ) 

49 

50 def get_object(self): 

51 """Only get the user record for the user making the request.""" 

52 return User.objects.get(username=self.request.user.username) 1bd

53 

54 template_name = "account/user_form.html" 

55 

56 

57class UserRedirectView(LoginRequiredMixin, RedirectView): 

58 permanent = False 

59 

60 def get_redirect_url(self): 

61 return reverse( 1e

62 "user_detail", 

63 kwargs={"username": self.request.user.username}, 

64 )