Coverage for accounts/views.py: 93%
43 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-04-11 19:33 +0000
« 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
9# Create your views here.
12def create_account(request):
13 """
14 View for Creating an Account
16 **HTTP Methods Supported**:
17 - POST: Handles the form submission to create a new user account.
18 - GET: Displays the account creation form.
20 **Parameters**:
21 - request (HttpRequest): The HTTP request object.
23 **Returns**:
24 - HttpResponse: Renders 'confirm_create.html' with appropriate data.
25 """
28 if request.method == 'POST':
29 email = request.POST['email']
30 password = request.POST['password']
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)
43 return render(request, 'create_account.html')
48def confirm_create(request):
49 """
50 Confirms the creation of an account.
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.
55 Args:
56 request (HttpRequest): The HTTP request object sent by the client.
58 Returns:
59 HttpResponse: A response containing the rendered HTML template 'confirm_create.html' with the provided context data.
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 """
66 return render(request, 'confirm_create.html', page_data)
69@login_required
70def profile(request):
71 """
72 View for managing the user account profile.
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.
77 Args:
78 request (HttpRequest): The HTTP request object sent by the client.
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 """
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)
91 try:
92 # Validate the email
93 if not username:
94 raise ValidationError("Invalid Username.")
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)
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 }
120 return render(request, 'profile.html', page_data)
124@login_required
125def logout(request):
126 """
127 View for logging out of an account.
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.
133 Args:
134 request (HttpRequest): The HTTP request object sent by the client.
136 Returns:
137 HttpResponse: A response containing the rendered HTML template 'logout.html' with the provided context data.
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 """
145 # Normally you would use Django's built-in logout function here
146 # from django.contrib.auth import logout
147 # logout(request)
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 }
158 return render(request, 'logout.html', page_data)