时间:2020年4月23日17:58:01
Django实现考试系统
#views.py
from django.shortcuts import render
from django.views.generic import View
from django.http import HttpResponse
from .models import Question,Exam,Subject,Mark
from django.db import models
# Create your views here.
class ExamView(View):
def get(self,request):
#获取id=1的科目
subjetcs1=Subject.objects.get(id=1)
#打印这个科目的名称,可省去
print(subjetcs1)
#获取到这个科目下的所有试题
question=Question.objects.filter(subject=subjetcs1)
context={
"question":question,
}
return render(request, "exam03.html",context=context)
def post(self,request):
#设置用户答案为一个空列表
if request.user.is_authenticated:
# uid=request.user.id
uid = request.user
uname=request.user.nick_name
subjetcs1 = Subject.objects.get(id=1)
current_exam=Exam.objects.get(id=1)
print("本次考试的科目为:",subjetcs1)
print("本次考试名称为:", current_exam)
print(uid)
print(uname)
my_answer = []
#依次从前端的答案中读取用户的选择,一共3道题,所以,这里的4应该手动修改
for i in range(1,4):
answer1 = request.POST.get('%s'%i)
my_answer.append(answer1)
i+=1
print("用户答案为:",my_answer)
# 打印所有题目的正确答案
correct_answer=re(request)
print("正确答案为:",correct_answer)
#基础,提升,专业分数,总分数均初始化为0
base_mark=0
promote_mark=0
major_mark=0
total_mark=0
i=0
while i <= 2:
if i <= 0:
if correct_answer[i] == my_answer[i]:
base_mark += 1
total_mark = total_mark + 1
elif i <= 1:
if correct_answer[i] == my_answer[i]:
total_mark = total_mark + 1
promote_mark += 1
else:
if correct_answer[i] == my_answer[i]:
total_mark = total_mark + 1
major_mark += 1
i = i + 1
print("总分数为:", total_mark)
print("基础分数为:", base_mark)
print("提升分数为:", promote_mark)
print("专业分数为:", major_mark)
mark=Mark(user=uid,subject=subjetcs1,total_mark=total_mark,exam=current_exam,base_mark=base_mark,promote_mark=promote_mark,major_mark=major_mark)
mark.save()
return render(request,'commite_succcess.html')
#打印所有题目的正确答案
def re(request):
option_list = []
options=Question.objects.all()
for option in options:
option_list.append(option.correct_op)
return option_list
#models.py
from django.db import models
from datetime import datetime
# Create your models here.
from django.db import models
from users.models import UserProfile
# Create your models here.
#科目
class Subject(models.Model):
name = models.CharField(max_length=255,verbose_name="科目名称")
description = models.TextField(verbose_name="科目描述")
cover_image = models.ImageField(upload_to = 'cover/',blank=True)
class Meta:
verbose_name="科目"
verbose_name_plural=verbose_name
def __str__(self):
return self.name
class Question(models.Model):
choice = (('A','A'),('B','B'),('C','C'),('D','D'))
subject = models.ForeignKey(Subject,on_delete=models.CASCADE,verbose_name="考试科目")
statments = models.TextField(verbose_name="问题描述")
op_A = models.CharField(max_length=1000)
op_B = models.CharField(max_length=1000)
op_C = models.CharField(max_length=1000)
op_D = models.CharField(max_length=1000)
correct_op = models.CharField(choices=choice,max_length=10)
mark = models.IntegerField(default=1)
class Meta:
verbose_name="题目"
verbose_name_plural=verbose_name
d