Coverage for accounts/views.py: 93%

43 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-04-11 19:33 +0000

1"""Accounts Views 

2""" 

3from django.shortcuts import render, get_object_or_404, redirect 

4from django.http import HttpResponse 

5from django.contrib.auth.models import User 

6from django.contrib.auth.decorators import login_required 

7from django.template import loader 

8 

9# Create your views here. 

10 

11 

12def create_account(request): 

13 """ 

14 View for Creating an Account 

15 

16 **HTTP Methods Supported**: 

17 - POST: Handles the form submission to create a new user account. 

18 - GET: Displays the account creation form. 

19 

20 **Parameters**: 

21 - request (HttpRequest): The HTTP request object. 

22 

23 **Returns**: 

24 - HttpResponse: Renders 'confirm_create.html' with appropriate data. 

25 """ 

26 

27 

28 if request.method == 'POST': 

29 email = request.POST['email'] 

30 password = request.POST['password'] 

31 

32 try: 

33 user_model = User.objects.create_user(username=email, email=email, password=password) 

34 return render(request, 'confirm_create.html') 

35 except Exception as e: 

36 page_data = { 

37 'save_error': True, 

38 'username': email, 

39 'error_message': str(e), 

40 } 

41 return render(request, 'confirm_create.html', page_data) 

42 

43 return render(request, 'create_account.html') 

44 

45 

46 

47 

48def confirm_create(request): 

49 """ 

50 Confirms the creation of an account. 

51 

52 This view is responsible for rendering a confirmation page after a user has successfully created an account. 

53 It displays a confirmation message to inform the user that their account has been successfully created. 

54 

55 Args: 

56 request (HttpRequest): The HTTP request object sent by the client. 

57 

58 Returns: 

59 HttpResponse: A response containing the rendered HTML template 'confirm_create.html' with the provided context data. 

60 

61 Note: 

62 - Ensure that `page_data` is defined and contains any necessary data to be passed to the template. 

63 - This view assumes that the account creation process has already been successfully completed before rendering this confirmation page. 

64 """ 

65 

66 return render(request, 'confirm_create.html', page_data) 

67 

68 

69@login_required 

70def profile(request): 

71 """ 

72 View for managing the user account profile. 

73 

74 This view handles both GET and POST requests. For a GET request, it renders the user's profile page with their current information. 

75 For a POST request, it processes the form data to update the user's username, first name, and last name. 

76 

77 Args: 

78 request (HttpRequest): The HTTP request object sent by the client. 

79 

80 Returns: 

81 HttpResponse: A response containing the rendered HTML template 'profile.html'. 

82 If the request method is POST and an error occurs during validation or saving, 

83 the response will include error messages in the context data. 

84 """ 

85 

86 if request.method == 'POST': 

87 username = request.POST.get('username', request.user.username) 

88 first_name = request.POST.get('first_name', request.user.first_name) 

89 last_name = request.POST.get('last_name', request.user.last_name) 

90 

91 try: 

92 # Validate the email 

93 if not username: 

94 raise ValidationError("Invalid Username.") 

95 

96 current_user = get_object_or_404(User, pk=request.user.id) 

97 current_user.username = username 

98 current_user.first_name = first_name 

99 current_user.last_name = last_name 

100 current_user.save() 

101 return redirect('profile') # Redirect to profile page upon successful update 

102 except Exception as e: 

103 page_data = { 

104 'save_error': True, 

105 'error_message': str(e), 

106 } 

107 return render(request, 'profile.html', page_data) 

108 

109 current_user = request.user 

110 page_data = { 

111 'user_id': current_user.id, 

112 'username': current_user.username, 

113 'first_name': current_user.first_name, 

114 'last_name': current_user.last_name, 

115 'email': current_user.email, 

116 'last_login': current_user.last_login, 

117 'date_joined': current_user.date_joined, 

118 } 

119 

120 return render(request, 'profile.html', page_data) 

121 

122 

123 

124@login_required 

125def logout(request): 

126 """ 

127 View for logging out of an account. 

128 

129 This view handles the user logout process. It renders a template after the user has logged out, 

130 providing information about the user such as username, first name, last name, email, last login date, 

131 and date joined. 

132 

133 Args: 

134 request (HttpRequest): The HTTP request object sent by the client. 

135 

136 Returns: 

137 HttpResponse: A response containing the rendered HTML template 'logout.html' with the provided context data. 

138 

139 Note: 

140 - Normally, you would use Django's built-in `logout` function to log the user out. 

141 This can be done using `from django.contrib.auth import logout` and calling `logout(request)`. 

142 - Ensure that the 'logout.html' template is set up to handle the provided context data. 

143 """ 

144 

145 # Normally you would use Django's built-in logout function here 

146 # from django.contrib.auth import logout 

147 # logout(request) 

148 

149 page_data = { 

150 'username': request.user.username, 

151 'first_name': request.user.first_name, 

152 'last_name': request.user.last_name, 

153 'email': request.user.email, 

154 'last_login': request.user.last_login, 

155 'date_joined': request.user.date_joined, 

156 } 

157 

158 return render(request, 'logout.html', page_data)