Coverage for accounts/views.py: 100.00%

24 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-15 09:40 -0700

1"""Views for django_api user accounts.""" 

2 

3from django.contrib.auth import get_user_model 1a

4from django.contrib.auth.mixins import LoginRequiredMixin 1a

5from django.contrib.messages.views import SuccessMessageMixin 1a

6from django.urls import reverse 1a

7from django.views.generic import ( 1a

8 DetailView, 

9 RedirectView, 

10 UpdateView, 

11) 

12 

13User = get_user_model() 1a

14 

15 

16class UserDetailView(LoginRequiredMixin, DetailView): 1a

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

18 

19 model = User 1a

20 slug_field = "username" 1a

21 slug_url_kwarg = "username" 1a

22 

23 template_name = "account/user_detail.html" 1a

24 

25 

26class UserUpdateView(LoginRequiredMixin, SuccessMessageMixin, UpdateView): 1a

27 fields = ( 1a

28 "name", 

29 "age", 

30 "bio", 

31 "country", 

32 "profile_pic", 

33 ) 

34 model = User 1a

35 success_message = "Your profile was updated successfully." 1a

36 

37 def get_success_url(self): 1a

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

39 return reverse( 1a

40 "user_detail", 

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

42 ) 

43 

44 def get_object(self): 1a

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

46 return User.objects.get(username=self.request.user.username) 1a

47 

48 template_name = "account/user_form.html" 1a

49 

50 

51class UserRedirectView(LoginRequiredMixin, RedirectView): 1a

52 permanent = False 1a

53 

54 def get_redirect_url(self): 1a

55 return reverse( 1a

56 "user_detail", 

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

58 )