"""Accounts Views
"""
from django.shortcuts import render, get_object_or_404, redirect
from django.http import HttpResponse
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from django.template import loader
# Create your views here.
[docs]
def create_account(request):
"""
View for Creating an Account
**HTTP Methods Supported**:
- POST: Handles the form submission to create a new user account.
- GET: Displays the account creation form.
**Parameters**:
- request (HttpRequest): The HTTP request object.
**Returns**:
- HttpResponse: Renders 'confirm_create.html' with appropriate data.
"""
if request.method == 'POST':
email = request.POST['email']
password = request.POST['password']
try:
user_model = User.objects.create_user(username=email, email=email, password=password)
return render(request, 'confirm_create.html')
except Exception as e:
page_data = {
'save_error': True,
'username': email,
'error_message': str(e),
}
return render(request, 'confirm_create.html', page_data)
return render(request, 'create_account.html')
[docs]
def confirm_create(request):
"""
Confirms the creation of an account.
This view is responsible for rendering a confirmation page after a user has successfully created an account.
It displays a confirmation message to inform the user that their account has been successfully created.
Args:
request (HttpRequest): The HTTP request object sent by the client.
Returns:
HttpResponse: A response containing the rendered HTML template 'confirm_create.html' with the provided context data.
Note:
- Ensure that `page_data` is defined and contains any necessary data to be passed to the template.
- This view assumes that the account creation process has already been successfully completed before rendering this confirmation page.
"""
return render(request, 'confirm_create.html', page_data)
[docs]
@login_required
def profile(request):
"""
View for managing the user account profile.
This view handles both GET and POST requests. For a GET request, it renders the user's profile page with their current information.
For a POST request, it processes the form data to update the user's username, first name, and last name.
Args:
request (HttpRequest): The HTTP request object sent by the client.
Returns:
HttpResponse: A response containing the rendered HTML template 'profile.html'.
If the request method is POST and an error occurs during validation or saving,
the response will include error messages in the context data.
"""
if request.method == 'POST':
username = request.POST.get('username', request.user.username)
first_name = request.POST.get('first_name', request.user.first_name)
last_name = request.POST.get('last_name', request.user.last_name)
try:
# Validate the email
if not username:
raise ValidationError("Invalid Username.")
current_user = get_object_or_404(User, pk=request.user.id)
current_user.username = username
current_user.first_name = first_name
current_user.last_name = last_name
current_user.save()
return redirect('profile') # Redirect to profile page upon successful update
except Exception as e:
page_data = {
'save_error': True,
'error_message': str(e),
}
return render(request, 'profile.html', page_data)
current_user = request.user
page_data = {
'user_id': current_user.id,
'username': current_user.username,
'first_name': current_user.first_name,
'last_name': current_user.last_name,
'email': current_user.email,
'last_login': current_user.last_login,
'date_joined': current_user.date_joined,
}
return render(request, 'profile.html', page_data)
[docs]
@login_required
def logout(request):
"""
View for logging out of an account.
This view handles the user logout process. It renders a template after the user has logged out,
providing information about the user such as username, first name, last name, email, last login date,
and date joined.
Args:
request (HttpRequest): The HTTP request object sent by the client.
Returns:
HttpResponse: A response containing the rendered HTML template 'logout.html' with the provided context data.
Note:
- Normally, you would use Django's built-in `logout` function to log the user out.
This can be done using `from django.contrib.auth import logout` and calling `logout(request)`.
- Ensure that the 'logout.html' template is set up to handle the provided context data.
"""
# Normally you would use Django's built-in logout function here
# from django.contrib.auth import logout
# logout(request)
page_data = {
'username': request.user.username,
'first_name': request.user.first_name,
'last_name': request.user.last_name,
'email': request.user.email,
'last_login': request.user.last_login,
'date_joined': request.user.date_joined,
}
return render(request, 'logout.html', page_data)