Django实现考试系统,并实现后台数据可视化

时间: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
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值