Files
penracourses/rad/views.py
T
2021-02-07 22:43:17 +00:00

121 lines
3.5 KiB
Python

from django.shortcuts import render, get_object_or_404, redirect
from django.views.decorators.csrf import csrf_exempt
from django import forms
# from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required, user_passes_test
from django.contrib.auth.models import User
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic import ListView
from django.db.models.functions import Lower
from django.core.cache import cache
from django.urls import reverse_lazy, reverse
from django.http import Http404, JsonResponse
from django.http import HttpResponseRedirect, HttpResponse
from physics.models import CidUserAnswer as PhysicsCidUserAnswer
from physics.models import Exam as PhysicsExam
from anatomy.models import CidUserAnswer as AnatomyCidUserAnswer
from anatomy.models import Exam as AnatomyExam
from rapids.models import CidUserAnswer as RapidsCidUserAnswer
from rapids.models import Exam as RapidsExam
from anatomy.views import AnatomyExamViews
from rapids.views import RapidExamViews
from longs.views import LongExamViews
@login_required
def profile(request):
user = request.user
return render(request, "profile.html", {"user": user})
def cid_selector(request):
return render(
request,
"cid_selector.html",
)
def cid_scores(request, pk):
#exam = get_object_or_404(Exam, pk=pk)
# TODO:Need some kind of test for cid
cid = pk
#questions = exam.exam_questions.all()
physics_answers = PhysicsCidUserAnswer.objects.filter(
cid=cid)
anatomy_answers = AnatomyCidUserAnswer.objects.filter(
cid=cid)
rapids_answers = RapidsCidUserAnswer.objects.filter(
cid=cid)
if not physics_answers and not anatomy_answers and not rapids_answers:
raise Http404("cid not found")
physics_exam_ids = physics_answers.values_list("exam").distinct()
physics_exams = PhysicsExam.objects.filter(id__in=physics_exam_ids)
anatomy_exam_ids = anatomy_answers.values_list("exam").distinct()
anatomy_exams = AnatomyExam.objects.filter(id__in=anatomy_exam_ids)
rapids_exam_ids = rapids_answers.values_list("exam").distinct()
rapids_exams = RapidsExam.objects.filter(id__in=rapids_exam_ids)
return render(
request,
"cid_scores.html",
{
"physics_exams": physics_exams,
"anatomy_exams": anatomy_exams,
"rapids_exams": rapids_exams,
"cid": cid,
},
)
def active_exams(request):
anatomy_exams = AnatomyExamViews.active_exams(request, False)
rapid_exams = RapidExamViews.active_exams(request, False)
long_exams = LongExamViews.active_exams(request, False)
exams = []
exams.extend(anatomy_exams)
exams.extend(rapid_exams)
exams.extend(long_exams)
active_exams = {"exams": exams}
return JsonResponse(active_exams)
@csrf_exempt
def exam_submit(request):
if request.is_ajax and request.method == "POST":
exam_type, exam_id = request.POST.get("eid").split("/")
if exam_type == "anatomy":
return AnatomyExamViews.postExamAnswers(request)
elif exam_type == "rapid":
return RapidExamViews.postExamAnswers(request)
elif exam_type == "long":
return LongExamViews.postExamAnswers(request)
return JsonResponse({"success": False, "error": "Invalid exam type"})
# postExamAnswers
return JsonResponse({"success": False, "error": "Invalid data"})