Coverage for account/views.py: 0.00%

82 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-13 17:07 -0700

1from django.contrib import messages 

2from django.contrib.auth import authenticate, login 

3from django.contrib.auth.decorators import login_required 

4from django.contrib.auth.models import User 

5from django.http import HttpResponse, JsonResponse 

6from django.shortcuts import get_object_or_404, render 

7from django.views.decorators.http import require_POST 

8 

9from actions.models import Action 

10from actions.utils import create_action 

11 

12from .forms import LoginForm, ProfileEditForm, UserEditForm, UserRegistrationForm 

13from .models import Contact, Profile 

14 

15 

16def user_login(request): 

17 if request.method == "POST": 

18 form = LoginForm(request.POST) 

19 if form.is_valid(): 

20 cd = form.cleaned_data 

21 user = authenticate( 

22 request, username=cd["username"], password=cd["password"] 

23 ) 

24 if user is not None: 

25 if user.is_active: 

26 login(request, user) 

27 return HttpResponse("Authenticated successfully") 

28 else: 

29 return HttpResponse("Disabled account") 

30 else: 

31 return HttpResponse("Invalid login") 

32 else: 

33 form = LoginForm() 

34 return render(request, "account/login.html", {"form": form}) 

35 

36 

37@login_required 

38def dashboard(request): 

39 # Display all actions by default 

40 actions = Action.objects.exclude(user=request.user) 

41 following_ids = request.user.following.values_list("id", flat=True) 

42 

43 if following_ids: 

44 # If user is following others, retriev only their actions 

45 actions = actions.filter(user_id__in=following_ids) 

46 actions = actions.select_related("user", "user__profile").prefetch_related( 

47 "target" 

48 )[:10] 

49 return render( 

50 request, 

51 "account/dashboard.html", 

52 {"section": "dashboard", "actions": actions}, 

53 ) 

54 

55 

56def register(request): 

57 if request.method == "POST": 

58 user_form = UserRegistrationForm(request.POST) 

59 if user_form.is_valid(): 

60 new_user = user_form.save(commit=False) 

61 new_user.set_password(user_form.cleaned_data["password"]) 

62 new_user.save() 

63 Profile.objects.create(user=new_user) 

64 create_action(new_user, "has created an account") 

65 return render( 

66 request, 

67 "account/register_done.html", 

68 {"new_user": new_user}, 

69 ) 

70 else: 

71 user_form = UserRegistrationForm() 

72 return render( 

73 request, 

74 "account/register.html", 

75 {"user_form": user_form}, 

76 ) 

77 

78 

79@login_required 

80def edit(request): 

81 if request.method == "POST": 

82 user_form = UserEditForm(instance=request.user, data=request.POST) 

83 profile_form = ProfileEditForm( 

84 instance=request.user.profile, data=request.POST, files=request.FILES 

85 ) 

86 if user_form.is_valid() and profile_form.is_valid(): 

87 user_form.save() 

88 profile_form.save() 

89 messages.success(request, "Profile updated successfully") 

90 else: 

91 messages.error(request, "Error updating your profile") 

92 else: 

93 user_form = UserEditForm(instance=request.user) 

94 profile_form = ProfileEditForm(instance=request.user.profile) 

95 return render( 

96 request, 

97 "account/edit.html", 

98 {"user_form": user_form, "profile_form": profile_form}, 

99 ) 

100 

101 

102@login_required 

103def user_list(request): 

104 users = User.objects.filter(is_active=True) 

105 return render( 

106 request, "account/user/list.html", {"section": "people", "users": users} 

107 ) 

108 

109 

110@login_required 

111def user_detail(request, username): 

112 user = get_object_or_404(User, username=username, is_active=True) 

113 return render( 

114 request, "account/user/detail.html", {"section": "people", "user": user} 

115 ) 

116 

117 

118@require_POST 

119@login_required 

120def user_follow(request): 

121 user_id = request.POST.get("id") 

122 action = request.POST.get("action") 

123 if user_id and action: 

124 try: 

125 user = User.objects.get(id=user_id) 

126 if action == "follow": 

127 Contact.objects.get_or_create(user_from=request.user, user_to=user) 

128 create_action(request.user, "is following", user) 

129 else: 

130 Contact.objects.filter(user_from=request.user, user_to=user).delete() 

131 return JsonResponse({"status": "ok"}) 

132 except User.DoesNotExist: 

133 return JsonResponse({"status": "error"}) 

134 return JsonResponse({"status": "error"})