PageRenderTime 40ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/exam/views.py

https://gitlab.com/nayonacademy/questiongenerate
Python | 261 lines | 154 code | 33 blank | 74 comment | 22 complexity | 97de2c49f3490ba6f7bd201d0a3638b9 MD5 | raw file
  1. from django.contrib.auth import authenticate, logout
  2. from django.contrib.auth import login as auth_login
  3. from django.contrib.auth.decorators import login_required
  4. from django.http.response import HttpResponse, HttpResponseRedirect
  5. from django.shortcuts import render
  6. # Create your views here.
  7. from exam.forms import SpecialityForm, TopicsForm, DistributionForm
  8. from exam.models import Speciality, Topics, Journal, JournalTransaction
  9. from django.contrib import messages
  10. from django.contrib.auth.models import User
  11. # =========================== LOG IN & LOG OUT AREA ========================== #
  12. def login(request):
  13. """
  14. User Login area
  15. :param request:
  16. :return: Dashboard
  17. """
  18. if request.method == 'POST':
  19. username = request.POST['username']
  20. password = request.POST['password']
  21. user = authenticate(username=username, password=password)
  22. if user:
  23. if user.is_active:
  24. auth_login(request, user)
  25. return HttpResponseRedirect('dashboard')
  26. else:
  27. return HttpResponse("Your account is disabled.")
  28. else:
  29. print "Invalid login details: {0}, {1}".format(username, password)
  30. return HttpResponse("Invalid login details supplied.")
  31. else:
  32. return render(request, 'login.html')
  33. @login_required
  34. def user_logout(request):
  35. """
  36. User Logout
  37. :param request:
  38. :return: Login page
  39. """
  40. logout(request)
  41. return HttpResponse("Successfully Logout")
  42. # =========================== SPECIALITY ===================================== #
  43. @login_required
  44. def create_speciality(request):
  45. """
  46. Create Speciality
  47. :param request:
  48. :return:
  49. """
  50. if request.method == 'POST':
  51. form = SpecialityForm(request.POST)
  52. if form.is_valid():
  53. instance = form.save(commit=False)
  54. instance.save()
  55. form = SpecialityForm()
  56. messages.success(request, 'Form submission successful')
  57. else:
  58. form = SpecialityForm()
  59. return render(request, 'create_speciality.html', {'form': form})
  60. @login_required
  61. def dashboard(request):
  62. """
  63. Show all the Speciality as a list view
  64. :param request:
  65. :return: Speciality list
  66. """
  67. if request.user.is_superuser:
  68. queryset = Speciality.objects.all()
  69. else:
  70. queryset = Speciality.objects.filter(distribution__user__username=request.user.username)
  71. context = {
  72. "object_list": queryset
  73. }
  74. return render(request, 'dashboard.html', context)
  75. def update_speciality(request, id):
  76. if request.method == "GET":
  77. speciality = Speciality.objects.get(id=id)
  78. if request.method == "POST":
  79. name = request.POST.get('name')
  80. print (name)
  81. id = request.POST.get('id')
  82. speciality = Speciality.objects.filter(id=id)
  83. speciality.name = name
  84. speciality.save()
  85. context = {
  86. "speciality": speciality
  87. }
  88. return render(request, 'update_speciality.html', context)
  89. # =========================== QUESTIONS ===================================== #
  90. @login_required
  91. def create_question(request):
  92. """
  93. Create Questions with multiple options
  94. :param request:
  95. :return:
  96. """
  97. queryset = Topics.objects.filter(user=request.user.id)
  98. return render(request, 'create_question.html', {'obj_list': queryset})
  99. @login_required
  100. def question_list(request):
  101. """
  102. Show the questions list
  103. :param request:
  104. :return:
  105. """
  106. queryset = Journal.objects.filter(user=request.user.id)
  107. context = {
  108. "object_list": queryset
  109. }
  110. return render(request, 'list_questions.html', context)
  111. # =========================== TOPICS ===================================== #
  112. @login_required
  113. def create_topic(request):
  114. """
  115. Create question under specific Speciality
  116. :param request:
  117. :return:
  118. """
  119. special = Speciality.objects.filter(distribution__user__username=request.user.username)
  120. if request.method == 'POST':
  121. form = TopicsForm(request.POST)
  122. if form.is_valid():
  123. print ("I am here One")
  124. instance = form.save(commit=False)
  125. instance.save()
  126. print ("I am here One")
  127. form = TopicsForm()
  128. print ("I am here One")
  129. messages.success(request, 'Form Submission Successful')
  130. else:
  131. form = TopicsForm()
  132. context = {
  133. "form": form,
  134. "special": special
  135. }
  136. return render(request, 'create_topics.html', context)
  137. @login_required
  138. def topic_list(request):
  139. """
  140. Show the Topics List
  141. :param request:
  142. :return:
  143. """
  144. if request.user.is_superuser:
  145. queryset = Topics.objects.all()
  146. else:
  147. queryset = Topics.objects.filter(user=request.user.id)
  148. context = {
  149. "object_list": queryset
  150. }
  151. return render(request, 'list_topics.html', context)
  152. # =========================== NEW USERS ===================================== #
  153. @login_required
  154. def create_newuser(request):
  155. """
  156. Create New User
  157. :param request:
  158. :return:
  159. """
  160. if request.method == 'POST':
  161. username = request.POST.get("username", None)
  162. email = request.POST.get("email", None)
  163. password = request.POST.get("password", None)
  164. first_name = request.POST.get("first_name", None)
  165. last_name = request.POST.get("last_name", None)
  166. user, created = User.objects.get_or_create(username=username, email=email)
  167. if created:
  168. user.set_password(password) # This line will hash the password
  169. user.first_name = first_name
  170. user.last_name = last_name
  171. user.save() # DO NOT FORGET THIS LINE
  172. print (username, email, password, first_name, last_name)
  173. return render(request, 'create_user.html')
  174. @login_required
  175. def user_list(request):
  176. """
  177. Show the User List
  178. :param request:
  179. :return:
  180. """
  181. queryset = User.objects.all()
  182. context = {
  183. "object_list": queryset
  184. }
  185. return render(request, 'list_user.html', context)
  186. # =========================== DISTRIBUTIONS ===================================== #
  187. @login_required
  188. def distributionview(request):
  189. """
  190. Distribute user to specific speciality
  191. :param request:
  192. :return:
  193. """
  194. form = DistributionForm()
  195. if request.method == 'POST':
  196. form = DistributionForm(request.POST)
  197. if form.is_valid():
  198. instance = form.save(commit=False)
  199. instance.save()
  200. form = DistributionForm()
  201. messages.success(request, 'Form submission successful')
  202. return render(request, 'distribution.html', {'form': form})
  203. # =========================== QUESTIONS GENERATIONS ===================================== #
  204. def generate_exam(request):
  205. """
  206. Admin can Generate the questions
  207. :param request:
  208. :return:
  209. """
  210. # queryset = JournalTransaction.objects.filter(journal__topics=13)
  211. topicsno = request.POST.get("topicsno", None)
  212. limitno = request.POST.get("limitno", None)
  213. queryset = Journal.objects.filter(topics=topicsno)[0:limitno]
  214. context = {
  215. "object_list": queryset
  216. }
  217. return render(request, 'generate_exam.html', context)
  218. def selecttopics(request):
  219. """
  220. Generate question need select the specific category and the question number
  221. :param request:
  222. :return:
  223. """
  224. queryset = Topics.objects.all()
  225. context = {
  226. "object_list": queryset
  227. }
  228. return render(request, 'select_topics.html', context)