Advertisement
themaleem

student_views.py

Jul 14th, 2023
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.59 KB | None | 0 0
  1. from django.urls import reverse
  2. from django.conf import settings
  3. from django.contrib import messages
  4. from django.core.mail import EmailMessage
  5. from django.core.paginator import Paginator
  6. from django.contrib.auth.decorators import login_required
  7. from django.shortcuts import render, get_object_or_404, redirect
  8.  
  9.  
  10. from .forms import ContactForm
  11. from .models import Group, Module, Registration
  12. from users.custom_decorators import login_required_message
  13. from studentregistration.utils import get_student_from_request
  14.  
  15.  
  16. def home(request):
  17.     # load the courses from the database
  18.     all_courses = {"courses": Group.objects.all(), "title": "Welcome"}
  19.     return render(request, "studentregistration/home.html", all_courses)
  20.  
  21.  
  22. def about(request):
  23.     return render(request, "studentregistration/about.html", {"title": "About US"})
  24.  
  25.  
  26. def contact(request):
  27.     if request.method == "POST":
  28.         form = ContactForm(request.POST)
  29.         if form.is_valid():
  30.             email = EmailMessage(
  31.                 f" CloudGeeks - {form.cleaned_data['name']} - {form.cleaned_data['subject']}",
  32.                 form.cleaned_data["message"],
  33.                 form.cleaned_data["email"],
  34.                 [
  35.                     settings.EMAIL_HOST_USER,
  36.                     "themaleem@gmail.com",
  37.                     "charityodoh75@gmail.com",
  38.                 ],
  39.             )
  40.  
  41.             email.send(fail_silently=False)
  42.  
  43.             messages.success(request, "Your message has been sent. Thank you!")
  44.             return render(
  45.                 request,
  46.                 "studentregistration/contact.html",
  47.                 {"title": "Contact", "form": ContactForm()},
  48.             )
  49.         else:
  50.             return render(
  51.                 request,
  52.                 "studentregistration/contact.html",
  53.                 {"title": "Contact", "form": form},
  54.             )
  55.     else:
  56.         form = ContactForm()
  57.     return render(
  58.         request, "studentregistration/contact.html", {"title": "Contact", "form": form}
  59.     )
  60.  
  61.  
  62. def course_list(request):
  63.     all_courses = {"courses": Group.objects.all(), "title": "Our Courses"}
  64.     return render(request, "studentregistration/course_list.html", all_courses)
  65.  
  66.  
  67. def course_details(request, id=1):
  68.     course = Group.objects.get(id=id)
  69.     modules = course.modules.all()
  70.     course_view_details = {
  71.         "course": course,
  72.         "modules": modules,
  73.         "title": "Course Details",
  74.     }
  75.     return render(
  76.         request, "studentregistration/course_details.html", course_view_details
  77.     )
  78.  
  79.  
  80. def module_details(request, code):
  81.     module = get_object_or_404(Module, code=code)
  82.  
  83.     # student will return None if it doesnt't exist
  84.     student = get_student_from_request(request)
  85.  
  86.     context = {
  87.         "module": module,
  88.         "title": module.name,
  89.         "registrations_count": module.registrations_count,
  90.         "registrations": module.student_registration_details,
  91.     }
  92.  
  93.     context["can_register"] = student is not None and student.can_register_on_module(
  94.         module
  95.     )
  96.  
  97.     context[
  98.         "has_registration"
  99.     ] = student is not None and student.has_registered_on_module(module)
  100.  
  101.     return render(request, "studentregistration/module_details.html", context)
  102.  
  103.  
  104. @login_required_message
  105. @login_required
  106. def student_registrations(request):
  107.     registrations = Registration.objects.filter(student=request.user.student).order_by(
  108.         "registration_date"
  109.     )
  110.  
  111.     # paginate the registrations
  112.     paginated_registrations = Paginator(registrations, 2)
  113.     page_list = request.GET.get("page")
  114.     paginated_registrations = paginated_registrations.get_page(page_list)
  115.     context = {
  116.         "title": "My Registrations",
  117.         "paginated_registrations": paginated_registrations,
  118.     }
  119.     return render(request, "studentregistration/registrations.html", context)
  120.  
  121.  
  122. @login_required_message
  123. @login_required
  124. def register(request, code):
  125.     module = get_object_or_404(Module, code=code)
  126.  
  127.     # incase user tries to re-register buy copying the register url
  128.     registration, created = Registration.objects.get_or_create(
  129.         module=module, student=request.user.student
  130.     )
  131.     if created:
  132.         messages.success(request, f"Successfully registered to {module.name}")
  133.     else:
  134.         messages.success(request, f"You've already registered to {module.name}")
  135.  
  136.     # redirect to previous page that sent user here
  137.     # or build the module page url and redirect user there
  138.     module_page = reverse("studentregistration:module_details", args=[module.code])
  139.     redirect_to = request.META.get("HTTP_REFERER", module_page)
  140.     return redirect(redirect_to)
  141.  
  142.  
  143. @login_required_message
  144. @login_required
  145. def unregister(request, code):
  146.     registration = get_object_or_404(
  147.         Registration, module__code=code, student=request.user.student
  148.     )
  149.     module = registration.module
  150.     if request.method == "POST":
  151.         registration.delete()
  152.         messages.success(request, f"Successfully unregistered from {module.name}")
  153.         return redirect(
  154.             reverse("studentregistration:module_details", args=[module.code])
  155.         )
  156.         # module_page = reverse("studentregistration:module_details", args=[module.code])
  157.         # redirect_to = request.META.get("HTTP_REFERER", module_page)
  158.         # return redirect(redirect_to)
  159.  
  160.     context = {"title": "Unregister", "module": module, "registration": registration}
  161.     return render(request, "studentregistration/unregister.html", context)
  162.  
  163.  
  164. def error_404(request, exception):
  165.     return render(request, "studentregistration/404.html", {"title": "404 Error"})
  166.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement