Coverage for reader\views.py: 93%
42 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-06-29 10:02 +0100
« prev ^ index » next coverage.py v7.4.4, created at 2024-06-29 10:02 +0100
1from django.contrib import messages
2from django.contrib.auth import get_user
3from django.http import HttpResponseServerError
4from django.shortcuts import render, redirect
5from django.views import View
6from django.conf import settings
7from book.models import Book
8from reader.forms import ProfileImageForm
9from reader.models import ProfileImage
12class ProfileDetail(View):
13 def get(self, request):
14 """
15 Handles the GET request for the reader view.
17 Args:
18 request (HttpRequest): The HTTP request object.
20 Returns:
21 HttpResponse: The HTTP response object containing the rendered
22 template.
23 """
24 reader = get_user(request)
25 books = Book.objects.filter(reader=reader)
26 image = ProfileImage.objects.filter(user=reader)
27 if image:
28 reader.image = image[0].image
29 context = {'reader': reader, 'books': books, 'DEBUG': settings.DEBUG}
30 return render(request, "reader/reader.html", context)
32 def post(self, request):
33 """
34 Handle the POST request for updating user profile.
36 Args:
37 request (HttpRequest): The HTTP request object.
39 Returns:
40 HttpResponseRedirect: Redirects to the 'books' page.
42 Raises:
43 HttpResponseServerError: If 'emulate-error' parameter is present
44 in the request.
45 """
46 if request.POST.get('emulate-error'):
47 raise HttpResponseServerError()
48 if request.FILES.get('fileInput'):
49 self.save_image(request)
50 user = get_user(request)
51 user.first_name = request.POST['first-name']
52 user.last_name = request.POST['last-name']
53 user.email = request.POST['email']
54 user.save()
55 messages.add_message(request, messages.SUCCESS,
56 f'Updated profile for {user}')
57 return redirect('books')
59 def save_image(self, request):
60 """
61 Saves the profile image for the user.
63 Args:
64 request (HttpRequest): The HTTP request object.
66 Returns:
67 None
68 """
69 reader = get_user(request)
70 image = ProfileImage.objects.filter(user=reader).first()
72 if image:
73 image_form = ProfileImageForm(data=request.POST, instance=image)
74 else:
75 image_form = ProfileImageForm(data=request.POST)
77 if image_form.is_valid():
78 image = image_form.save(commit=False)
79 image.image = request.FILES['fileInput']
80 if not hasattr(image, 'user'):
81 image.user = reader
82 image.save()