wordpress怎么去掉主题的搜索框,沈阳关键字优化,中山网站建设设计,在线公司网站查询大家好#xff0c;我是java1234_小锋老师#xff0c;看到一个不错的基于Python的DjangoVue3在线考试系统#xff0c;分享下哈。
项目视频演示
【免费】基于Python的DjangoVue3在线考试系统 Python毕业设计_哔哩哔哩_bilibili
项目介绍
本论文提出并实现了一种基于Python…大家好我是java1234_小锋老师看到一个不错的基于Python的DjangoVue3在线考试系统分享下哈。
项目视频演示
【免费】基于Python的DjangoVue3在线考试系统 Python毕业设计_哔哩哔哩_bilibili
项目介绍
本论文提出并实现了一种基于Python的Django和Vue3技术栈的在线考试系统旨在为教育机构提供高效、便捷的考试管理与评估解决方案。随着在线教育的快速发展传统的考试模式面临诸多挑战包括时间限制、资源分配及评分效率等问题。针对这些挑战我们设计了一个集题库管理、在线答题、自动评分、统计分析等功能于一体的系统以提高考试的灵活性和效率。
系统的后端采用Django框架充分利用其强大的ORM对象关系映射功能便于数据的管理与操作。通过Django REST framework构建RESTful API实现了前后端的高效通信确保数据的实时更新与处理。系统的数据库设计包括用户管理、考试管理、题库管理等模块能够满足不同类型考试的需求。
前端方面我们选择了Vue3作为主要开发框架利用其响应式数据绑定和组件化开发的优势实现了一个友好且易于操作的用户界面。用户可以通过直观的操作界面进行考试报名、在线答题、查看成绩等功能提升了用户体验。此外系统还集成了实时反馈机制允许考生在答题过程中查看答题状态和剩余时间提高了考试的透明度和紧迫感。
为了确保系统的稳定性和安全性我们进行了严格的测试包括功能测试、性能测试和安全性测试。结果表明该系统在高并发场景下仍能保持良好的响应速度自动评分功能能够快速且准确地处理考试结果并生成详细的统计报表帮助教师和管理人员分析考生表现。
综上所述基于Django和Vue3的在线考试系统不仅解决了传统考试模式中的一些痛点还为用户提供了便捷的操作体验。未来我们计划进一步扩展系统功能例如引入智能题库推荐、实时监考功能以及数据挖掘分析以适应更加复杂的在线考试需求。该系统的实现对于推动教育信息化进程具有重要意义有助于提升在线教育的质量和效率。 系统展示 部分代码
import uuid
from datetime import timefrom django.core.cache import cache
from django.core.paginator import Paginator
from django.db import transaction
from django.db.models import Qfrom app import models
from comm import ExamUtils
from comm.BaseView import BaseView
from comm.CommUtils import SysUtil
from comm.CommUtils import DateUtil
系统处理class SysView(BaseView):def get(self, request, module, *args, **kwargs):if module info:return SysView.getUserInfo(request)else:return BaseView.error(请求地址不存在)def post(self, request, module, *args, **kwargs):if module login:return SysView.login(request)elif module exit:return SysView.exit(request)elif module info:return SysView.updUserInfo(request)elif module pwd:return SysView.updUserPwd(request)else:return BaseView.error(请求地址不存在)# 获取指定用户信息def getUserInfo(request):user models.Users.objects.filter(idcache.get(request.GET.get(token))).first()if user.type0:return BaseView.successData({id: user.id,userName: user.userName,name: user.name,gender: user.gender,age: user.age,type: user.type,})elif user.type1:teacher models.Teachers.objects.filter(user__iduser.id).first()return BaseView.successData({id: user.id,userName: user.userName,name: user.name,gender: user.gender,age: user.age,type: user.type,phone: teacher.phone,record: teacher.record,job: teacher.job,})elif user.type2:student models.Students.objects.filter(user__iduser.id).first()return BaseView.successData({id: user.id,userName: user.userName,name: user.name,gender: user.gender,age: user.age,type: user.type,gradeId: student.grade.id,gradeName: student.grade.name,collegeId: student.college.id,collegeName: student.college.name,})#登陆处理def login(request):userName request.POST.get(userName)passWord request.POST.get(passWord)user models.Users.objects.filter(userNameuserName)if user.exists():user user.first()if user.passWord passWord:token uuid.uuid4()resl {token: str(token)}cache.set(token, user.id, 60*60*60*3)return SysView.successData(resl)else:return SysView.warn(用户密码输入错误)else:return SysView.warn(用户名输入错误)#退出系统def exit(request):cache.delete(request.POST.get(token))return BaseView.success()# 修改用户信息def updUserInfo(request):user models.Users.objects.filter(idcache.get(request.POST.get(token)))if (request.POST.get(userName) ! user.first().userName) \(models.Users.objects.filter(userNamerequest.POST.get(userName)).exists()):return BaseView.warn(用户账号已存在)else:user.update(userNamerequest.POST.get(userName),namerequest.POST.get(name),genderrequest.POST.get(gender),agerequest.POST.get(age),)return BaseView.success()# 修改用户密码def updUserPwd(request):user models.Users.objects.filter(idcache.get(request.POST.get(token)))if(request.POST.get(newPwd)!request.POST.get(rePwd)):return BaseView.warn(两次输入的密码不一致)elif(request.POST.get(oldPwd)!user.first().passWord):return BaseView.warn(原始密码输入错误)else:user.update(passWordrequest.POST.get(newPwd))return BaseView.success()
学院信息处理class CollegesView(BaseView):def get(self, request, module, *args, **kwargs):if module all:return CollegesView.getAll(request)elif module page:return CollegesView.getPageInfos(request)else:return BaseView.error(请求地址不存在)def post(self, request, module, *args, **kwargs):if module add:return CollegesView.addInfo(request)elif module upd:return CollegesView.updInfo(request)elif module del:return CollegesView.delInfo(request)else:return BaseView.error(请求地址不存在)# 获取全部的学院信息def getAll(request):colleges models.Colleges.objects.all();return BaseView.successData(list(colleges.values()))# 分页获取学院信息def getPageInfos(request):pageIndex request.GET.get(pageIndex, 1)pageSize request.GET.get(pageSize, 10)name request.GET.get(name)qruery Q();if SysUtil.isExit(name):qruery qruery Q(name__containsname)data models.Colleges.objects.filter(qruery).order_by(-createTime)paginator Paginator(data, pageSize)resl []for item in list(paginator.page(pageIndex)):resl.append({id: item.id,name: item.name,createTime: item.createTime})pageData BaseView.parasePage(int(pageIndex), int(pageSize),paginator.page(pageIndex).paginator.num_pages,paginator.count, resl)return BaseView.successData(pageData)# 添加学院信息def addInfo(request):models.Colleges.objects.create(namerequest.POST.get(name),createTimeDateUtil.getNowDateTime())return BaseView.success()# 修改学院信息def updInfo(request):models.Colleges.objects. \filter(idrequest.POST.get(id)).update(namerequest.POST.get(name))return BaseView.success()# 删除学院信息def delInfo(request):if models.Students.objects.filter(college__idrequest.POST.get(id)).exists():return BaseView.warn(存在关联记录无法移除)else:models.Colleges.objects.filter(idrequest.POST.get(id)).delete()return BaseView.success()
班级信息处理class GradesView(BaseView):def get(self, request, module, *args, **kwargs):if module all:return GradesView.getAll(request)elif module page:return GradesView.getPageInfos(request)else:return BaseView.error(请求地址不存在)def post(self, request, module, *args, **kwargs):if module add:return GradesView.addInfo(request)elif module upd:return GradesView.updInfo(request)elif module del:return GradesView.delInfo(request)else:return BaseView.error(请求地址不存在)# 获取全部的班级信息def getAll(request):grades models.Grades.objects.all();return BaseView.successData(list(grades.values()))# 分页获取班级信息def getPageInfos(request):pageIndex request.GET.get(pageIndex, 1)pageSize request.GET.get(pageSize, 10)name request.GET.get(name)qruery Q();if SysUtil.isExit(name):qruery qruery Q(name__containsname)data models.Grades.objects.filter(qruery).order_by(-createTime)paginator Paginator(data, pageSize)resl []for item in list(paginator.page(pageIndex)):resl.append({id: item.id,name: item.name,createTime: item.createTime})pageData BaseView.parasePage(int(pageIndex), int(pageSize),paginator.page(pageIndex).paginator.num_pages,paginator.count, resl)return BaseView.successData(pageData)# 添加班级信息def addInfo(request):models.Grades.objects.create(namerequest.POST.get(name),createTimeDateUtil.getNowDateTime())return BaseView.success()# 修改班级信息def updInfo(request):models.Grades.objects. \filter(idrequest.POST.get(id)).update(namerequest.POST.get(name))return BaseView.success()# 删除班级信息def delInfo(request):if models.Students.objects.filter(grade__idrequest.POST.get(id)).exists():return BaseView.warn(存在关联学生无法移除)elif models.Exams.objects.filter(grade__idrequest.POST.get(id)).exists():return BaseView.warn(存在关联考试无法移除)else:models.Grades.objects.filter(idrequest.POST.get(id)).delete()return BaseView.success()
科目信息处理class ProjectsView(BaseView):def get(self, request, module, *args, **kwargs):if module all:return ProjectsView.getAll(request)elif module page:return ProjectsView.getPageInfos(request)else:return BaseView.error(请求地址不存在)def post(self, request, module, *args, **kwargs):if module add:return ProjectsView.addInfo(request)elif module upd:return ProjectsView.updInfo(request)elif module del:return ProjectsView.delInfo(request)else:return BaseView.error(请求地址不存在)# 获取全部的科目信息def getAll(request):projects models.Projects.objects.all();return BaseView.successData(list(projects.values()))# 分页获取科目信息def getPageInfos(request):pageIndex request.GET.get(pageIndex, 1)pageSize request.GET.get(pageSize, 10)name request.GET.get(name)qruery Q();if SysUtil.isExit(name):qruery qruery Q(name__containsname)data models.Projects.objects.filter(qruery).order_by(-createTime)paginator Paginator(data, pageSize)resl []for item in list(paginator.page(pageIndex)):resl.append({id: item.id,name: item.name,createTime: item.createTime})pageData BaseView.parasePage(int(pageIndex), int(pageSize),paginator.page(pageIndex).paginator.num_pages,paginator.count, resl)return BaseView.successData(pageData)# 添加科目信息def addInfo(request):models.Projects.objects.create(namerequest.POST.get(name),createTimeDateUtil.getNowDateTime())return BaseView.success()# 修改科目信息def updInfo(request):models.Projects.objects. \filter(idrequest.POST.get(id)).update(namerequest.POST.get(name))return BaseView.success()# 删除科目信息def delInfo(request):if (models.Exams.objects.filter(project__idrequest.POST.get(id)).exists() |models.Practises.objects.filter(project__idrequest.POST.get(id)).exists()):return BaseView.warn(存在关联记录无法移除)else:models.Projects.objects.filter(idrequest.POST.get(id)).delete()return BaseView.success()
教师信息处理class TeachersView(BaseView):def get(self, request, module, *args, **kwargs):if module page:return TeachersView.getPageInfos(request)else:return BaseView.error(请求地址不存在)def post(self, request, module, *args, **kwargs):if module add:return TeachersView.addInfo(request)elif module upd:return TeachersView.updInfo(request)elif module del:return TeachersView.delInfo(request)else:return BaseView.error(请求地址不存在)# 分页查询教师信息def getPageInfos(request):pageIndex request.GET.get(pageIndex, 1)pageSize request.GET.get(pageSize, 10)name request.GET.get(name)record request.GET.get(record)job request.GET.get(job)qruery Q();if SysUtil.isExit(name):qruery qruery Q(user__name__containsname)if SysUtil.isExit(record):qruery qruery Q(recordrecord)if SysUtil.isExit(job):qruery qruery Q(jobjob)data models.Teachers.objects.filter(qruery)paginator Paginator(data, pageSize)resl []for item in list(paginator.page(pageIndex)):resl.append({id: item.user.id,userName: item.user.userName,name: item.user.name,gender: item.user.gender,age: item.user.age,type: item.user.type,phone: item.phone,record: item.record,job: item.job})pageData BaseView.parasePage(int(pageIndex), int(pageSize),paginator.page(pageIndex).paginator.num_pages,paginator.count, resl)return BaseView.successData(pageData)# 添加教师信息transaction.atomicdef addInfo(request):if models.Users.objects.filter(userNamerequest.POST.get(userName)).exists():return BaseView.warn(账号已存在请重新输入)elif models.Users.objects.filter(idrequest.POST.get(id)).exists():return BaseView.warn(工号已存在请重新输入)else:user models.Users.objects.create(idrequest.POST.get(id),userNamerequest.POST.get(userName),passWordrequest.POST.get(userName),namerequest.POST.get(name),genderrequest.POST.get(gender),agerequest.POST.get(age),type1,)models.Teachers.objects.create(useruser,phonerequest.POST.get(phone),recordrequest.POST.get(record),jobrequest.POST.get(job))return BaseView.success()# 修改教师信息def updInfo(request):models.Teachers.objects. \filter(user__idrequest.POST.get(id)).update(phonerequest.POST.get(phone),recordrequest.POST.get(record),jobrequest.POST.get(job))return BaseView.success()#删除教师信息transaction.atomicdef delInfo(request):if models.Exams.objects.filter(teacher__idrequest.POST.get(id)).exists():return BaseView.warn(存在关联记录无法移除)else:models.Users.objects.filter(idrequest.POST.get(id)).delete()return BaseView.success()
学生信息处理class StudentsView(BaseView):def get(self, request, module, *args, **kwargs):if module page:return StudentsView.getPageInfos(request)elif module info:return StudentsView.getInfo(request)else:return BaseView.error(请求地址不存在)def post(self, request, module, *args, **kwargs):if module add:return StudentsView.addInfo(request)elif module upd:return StudentsView.updInfo(request)elif module del:return StudentsView.delInfo(request)else:return BaseView.error(请求地址不存在)# 获取指定学生信息def getInfo(request):student models.Students.objects.filter(user__idrequest.GET.get(id)).first()return BaseView.successData({id: student.user.id,userName: student.user.userName,passWord: student.user.passWord,name: student.user.name,gender: student.user.gender,gradeId: student.grade.id,gradeName: student.grade.name,collegeId: student.college.id,collegeName: student.college.name,})#分页查询学生信息def getPageInfos(request):pageIndex request.GET.get(pageIndex, 1)pageSize request.GET.get(pageSize, 10)name request.GET.get(name)collegeId request.GET.get(collegeId)gradeId request.GET.get(gradeId)qruery Q();if SysUtil.isExit(name):qruery qruery Q(user__name__containsname)if SysUtil.isExit(collegeId):qruery qruery Q(college__idint(collegeId))if SysUtil.isExit(gradeId):qruery qruery Q(grade__idint(gradeId))data models.Students.objects.filter(qruery)paginator Paginator(data, pageSize)resl []for item in list(paginator.page(pageIndex)):resl.append({id: item.user.id,userName: item.user.userName,name: item.user.name,gender: item.user.gender,age: item.user.age,type: item.user.type,gradeId: item.grade.id,gradeName: item.grade.name,collegeId: item.college.id,collegeName: item.college.name})pageData BaseView.parasePage(int(pageIndex), int(pageSize),paginator.page(pageIndex).paginator.num_pages,paginator.count, resl)return BaseView.successData(pageData)# 添加学生信息transaction.atomicdef addInfo(request):if models.Users.objects.filter(userNamerequest.POST.get(userName)).exists():return BaseView.warn(账号已存在请重新输入)elif models.Users.objects.filter(idrequest.POST.get(id)).exists():return BaseView.warn(学号已存在请重新输入)else:user models.Users.objects.create(idrequest.POST.get(id),userNamerequest.POST.get(userName),passWordrequest.POST.get(userName),namerequest.POST.get(name),genderrequest.POST.get(gender),agerequest.POST.get(age),type2,)models.Students.objects.create(useruser,grademodels.Grades.objects.get(idrequest.POST.get(gradeId)),collegemodels.Colleges.objects.get(idrequest.POST.get(collegeId)))return BaseView.success()# 修改学生信息def updInfo(request):models.Students.objects. \filter(user__idrequest.POST.get(id)).update(grademodels.Grades.objects.get(idrequest.POST.get(gradeId)),collegemodels.Colleges.objects.get(idrequest.POST.get(collegeId)))return BaseView.success()#删除学生信息transaction.atomicdef delInfo(request):if (models.ExamLogs.objects.filter(student__idrequest.POST.get(id)).exists() |models.AnswerLogs.objects.filter(student__idrequest.POST.get(id)).exists()):return BaseView.warn(存在关联记录无法移除)else:models.Users.objects.filter(idrequest.POST.get(id)).delete()return BaseView.success()
习题信息处理class PractisesView(BaseView):def get(self, request, module, *args, **kwargs):if module page:return PractisesView.getPageInfos(request)elif module info:return PractisesView.getInfo(request)else:return BaseView.error(请求地址不存在)def post(self, request, module, *args, **kwargs):if module add:return PractisesView.addInfo(request)elif module setanswer:return PractisesView.setAnswer(request)else:return BaseView.error(请求地址不存在)# 获取指定 ID 的习题信息def getInfo(request):practise models.Practises.objects.filter(idrequest.GET.get(id)).first()if practise.type0:return BaseView.successData({id: practise.id,name: practise.name,answer: practise.answer,analyse: practise.analyse,type: practise.type,createTime: practise.createTime,projectId: practise.project.id,projectName: practise.project.name,options: list(models.Options.objects.filter(practise__idpractise.id).values())})else:return BaseView.successData({id: practise.id,name: practise.name,answer: practise.answer,analyse: practise.analyse,type: practise.type,createTime: practise.createTime,projectId: practise.project.id,projectName: practise.project.name,})#分页查询习题信息def getPageInfos(request):pageIndex request.GET.get(pageIndex, 1)pageSize request.GET.get(pageSize, 10)name request.GET.get(name)type request.GET.get(type)projectId request.GET.get(projectId)qruery Q();if SysUtil.isExit(name):qruery qruery Q(name__containsname)if SysUtil.isExit(type):qruery qruery Q(typeint(type))if SysUtil.isExit(projectId):qruery qruery Q(project__idint(projectId))data models.Practises.objects.filter(qruery).order_by(-createTime)paginator Paginator(data, pageSize)resl []for item in list(paginator.page(pageIndex)):if item.type0:resl.append({id: item.id,name: item.name,answer: int(item.answer) if SysUtil.isExit(item.answer) else ,analyse: item.analyse,type: item.type,projectId: item.project.id,projectName: item.project.name,createTime: item.createTime,optionTotal: models.Options.objects.filter(practise__iditem.id).count()})else:resl.append({id: item.id,name: item.name,answer: item.answer,analyse: item.analyse,type: item.type,projectId: item.project.id,projectName: item.project.name,createTime: item.createTime,optionTotal: 0})pageData BaseView.parasePage(int(pageIndex), int(pageSize),paginator.page(pageIndex).paginator.num_pages,paginator.count, resl)return BaseView.successData(pageData)#添加习题信息def addInfo(request):models.Practises.objects.create(namerequest.POST.get(name),typerequest.POST.get(type),projectmodels.Projects.objects.get(idrequest.POST.get(projectId)),createTimeDateUtil.getNowDateTime())return BaseView.success()#修改习题信息def setAnswer(request):models.Practises.objects. \filter(idrequest.POST.get(id)).update(answerrequest.POST.get(answer),analyserequest.POST.get(analyse))return BaseView.success()选项信息处理class OptionsView(BaseView):def get(self, request, module, *args, **kwargs):if module list:return OptionsView.getListByPractiseId(request)else:return BaseView.error(请求地址不存在)def post(self, request, module, *args, **kwargs):if module add:return OptionsView.addInfo(request)elif module upd:return OptionsView.updInfo(request)else:return BaseView.error(请求地址不存在)#依据习题编号获取选项信息def getListByPractiseId(request):options models.Options.objects.filter(practise__idrequest.GET.get(practiseId))return BaseView.successData(list(options.values()))# 添加选项信息def addInfo(request):models.Options.objects.create(namerequest.POST.get(name),practisemodels.Practises.objects.get(idrequest.POST.get(practiseId)))return BaseView.success()#修改选项信息def updInfo(request):models.Options.objects. \filter(idrequest.POST.get(id)).update(namerequest.POST.get(name))return BaseView.success()
考试信息处理class ExamsView(BaseView):def get(self, request, module, *args, **kwargs):if module page:return ExamsView.getPageInfos(request)elif module info:return ExamsView.getInfo(request)else:return BaseView.error(请求地址不存在)def post(self, request, module, *args, **kwargs):if module add:return ExamsView.addInfo(request)elif module make:return ExamsView.createExamPaper(request)else:return BaseView.error(请求地址不存在)# 获取考试信息def getInfo(request):exam models.Exams.objects.filter(idrequest.GET.get(id)).first()return BaseView.successData({id: exam.id,name: exam.name,createTime: exam.createTime,examTime: exam.examTime,teacherId: exam.teacher.id,teacherName: exam.teacher.name,projectId: exam.project.id,projectName: exam.project.name,gradeId: exam.grade.id,gradeName: exam.grade.name,})#分页查询考试信息def getPageInfos(request):pageIndex request.GET.get(pageIndex, 1)pageSize request.GET.get(pageSize, 10)name request.GET.get(name)gradeId request.GET.get(gradeId)projectId request.GET.get(projectId)teacherId request.GET.get(teacherId)qruery Q();if SysUtil.isExit(teacherId):qruery qruery Q(teacher__idteacherId)if SysUtil.isExit(name):qruery qruery Q(name__containsname)if SysUtil.isExit(gradeId):qruery qruery Q(grade__idgradeId)if SysUtil.isExit(projectId):qruery qruery Q(project__idprojectId)data models.Exams.objects.filter(qruery).order_by(-createTime)paginator Paginator(data, pageSize)resl []for item in list(paginator.page(pageIndex)):resl.append({id: item.id,name: item.name,examTime: item.examTime,createTime: item.createTime,projectId: item.project.id,projectName: item.project.name,teacherId: item.teacher.id,teacherName: item.teacher.name,gradeId: item.grade.id,gradeName: item.grade.name,})pageData BaseView.parasePage(int(pageIndex), int(pageSize),paginator.page(pageIndex).paginator.num_pages,paginator.count, resl)return BaseView.successData(pageData)# 添加考试信息def addInfo(request):if ExamUtils.CheckPractiseTotal.check(request.POST.get(projectId)):if models.Teachers.objects.filter(user__idrequest.POST.get(teacherId)).exists():models.Exams.objects.create(namerequest.POST.get(name),examTimerequest.POST.get(examTime),projectmodels.Projects.objects.get(idrequest.POST.get(projectId)),teachermodels.Users.objects.get(idrequest.POST.get(teacherId)),grademodels.Grades.objects.get(idrequest.POST.get(gradeId)),createTimeDateUtil.getNowDateTime())return BaseView.success()else:return BaseView.warn(指定工号的教师不存在)else:return BaseView.warn(相关题目数量不足无法准备考试)# 生成考试试卷def createExamPaper(request):projectId request.POST.get(projectId)paper ExamUtils.MakeExam.make(projectId)return BaseView.successData(paper)
考试记录处理class ExamLogsView(BaseView):def get(self, request, module, *args, **kwargs):if module pagestu:return ExamLogsView.getPageStudentLogs(request)elif module pagetea:return ExamLogsView.getPageTeacherLogs(request)elif module info:return ExamLogsView.getInfo(request)else:return BaseView.error(请求地址不存在)def post(self, request, module, *args, **kwargs):if module add:return ExamLogsView.addInfo(request)elif module upd:return ExamLogsView.updInfo(request)elif module put:return ExamLogsView.putExamLog(request)else:return BaseView.error(请求地址不存在)# 获取指定考试记录def getInfo(request):examLogs models.ExamLogs.objects.filter(idrequest.GET.get(id)).first()answers []qruery Q();qruery qruery Q(student__idrequest.GET.get(studentId))qruery qruery Q(exam__idexamLogs.exam.id)temps models.AnswerLogs.objects.filter(qruery).order_by(no)for item in temps:answers.append({id: item.id,score: item.score,status: item.status,answer: item.answer,no: item.no,practiseId: item.practise.id,practiseName: item.practise.name,practiseAnswer: item.practise.answer,practiseAnalyse: item.practise.analyse,options: list(models.Options.objects.filter(iditem.practise.id).values()),})return BaseView.successData({id: examLogs.id,status: examLogs.status,score: examLogs.score,createTime: examLogs.createTime,examId: examLogs.exam.id,examName: examLogs.exam.name,projectId: examLogs.exam.project.id,projectName: examLogs.exam.project.name,teacherId: examLogs.exam.teacher.id,teacherName: examLogs.exam.teacher.name,gradeId: examLogs.exam.grade.id,gradeName: examLogs.exam.grade.name,answers: answers})# 分页获取学生考试记录def getPageStudentLogs(request):pageIndex request.GET.get(pageIndex, 1)pageSize request.GET.get(pageSize, 10)examName request.GET.get(examName)studentId request.GET.get(studentId)projectId request.GET.get(projectId)qruery Q(student__idstudentId);if SysUtil.isExit(examName):qruery qruery Q(exam__name__containsexamName);if SysUtil.isExit(projectId):qruery qruery Q(exam__project__idprojectId)data models.ExamLogs.objects.filter(qruery).order_by(-createTime)paginator Paginator(data, pageSize)resl []for item in list(paginator.page(pageIndex)):resl.append({id: item.id,status: item.status,createTime: item.createTime,score: item.score,examId: item.exam.id,examName: item.exam.name,teacherId: item.exam.teacher.id,teacherName: item.exam.teacher.name,projectId: item.exam.project.id,projectName: item.exam.project.name,})pageData BaseView.parasePage(int(pageIndex), int(pageSize),paginator.page(pageIndex).paginator.num_pages,paginator.count, resl)return BaseView.successData(pageData)# 分页获取教师审核记录def getPageTeacherLogs(request):pageIndex request.GET.get(pageIndex, 1)pageSize request.GET.get(pageSize, 10)examName request.GET.get(examName)token request.GET.get(token)gradeId request.GET.get(gradeId)projectId request.GET.get(projectId)qruery Q(exam__teacher__idcache.get(token));if SysUtil.isExit(examName):qruery qruery Q(exam__name__containsexamName)if SysUtil.isExit(gradeId):qruery qruery Q(exam__grade__idgradeId)if SysUtil.isExit(projectId):qruery qruery Q(exam__project__idprojectId)data models.ExamLogs.objects.filter(qruery).order_by(-createTime)paginator Paginator(data, pageSize)resl []for item in list(paginator.page(pageIndex)):resl.append({id: item.id,status: item.status,createTime: item.createTime,score: item.score,examId: item.exam.id,examName: item.exam.name,studentId: item.student.id,studentName: item.student.name,projectId: item.exam.project.id,projectName: item.exam.project.name,gradeId: item.exam.grade.id,gradeName: item.exam.grade.name,})pageData BaseView.parasePage(int(pageIndex), int(pageSize),paginator.page(pageIndex).paginator.num_pages,paginator.count, resl)return BaseView.successData(pageData)# 添加考试记录def addInfo(request):models.ExamLogs.objects.create(studentmodels.Users.objects.get(idcache.get(request.POST.get(token))),exammodels.Exams.objects.get(idrequest.POST.get(examId)),status0,score0,createTimeDateUtil.getNowDateTime())return BaseView.success()# 修改考试记录def updInfo(request):models.ExamLogs.objects. \filter(idrequest.POST.get(id)).update(statusrequest.POST.get(status))return BaseView.success()# 公布学生考核成绩def putExamLog(request):studentId request.POST.get(studentId)examId request.POST.get(examId)qruery Q(student__idstudentId)qruery qruery Q(exam__idexamId)total 0.0answers models.AnswerLogs.objects.filter(qruery)for item in answers:if item.practise.type0:temp 2 if item.practise.answeritem.answer else 0total total tempmodels.AnswerLogs.objects. \filter(iditem.id).update(status1,score temp)elif item.practise.type1:total total item.scoreelif item.practise.type2:temp 2 if item.practise.answeritem.answer else 0total total tempmodels.AnswerLogs.objects. \filter(iditem.id).update(status1,score temp)elif item.practise.type3:total total item.scoremodels.ExamLogs.objects. \filter(qruery).update(status2,scoretotal)return BaseView.success()
答题记录处理class AnswerLogsView(BaseView):def get(self, request, module, *args, **kwargs):if module info:return AnswerLogsView.getInfo(request)elif module answers:return AnswerLogsView.getAnswers(request)elif module check:return AnswerLogsView.checkAnswers(request)else:return BaseView.error(请求地址不存在)def post(self, request, module, *args, **kwargs):if module add:return AnswerLogsView.addInfo(request)elif module audit:return AnswerLogsView.aduitAnswer(request)else:return BaseView.error(请求地址不存在)# 获取指定答题记录def getInfo(request):pass# 获取指定的答案列表def getAnswers(request):studentId request.GET.get(studentId)type request.GET.get(type)examId request.GET.get(examId)qruery Q(student__idstudentId);qruery qruery Q(exam__idexamId)resl []data models.AnswerLogs.objects.filter(qruery).order_by(no)for item in data:if item.practise.type int(type):resl.append({id: item.id,practiseId: item.practise.id,practiseName: item.practise.name,practiseAnswer: item.practise.answer,answer: item.answer,score: item.score,status: item.status,no: item.no})elif item.practise.type int(type):resl.append({id: item.id,practiseId: item.practise.id,practiseName: item.practise.name,practiseAnswer: item.practise.answer,answer: item.answer,score: item.score,status: item.status,no: item.no})return BaseView.successData(resl)#按照类型检查答题def checkAnswerType(studentId, examId, type):qruery Q(student__idstudentId)qruery qruery Q(exam__idexamId)qruery qruery Q(status0)qruery qruery Q(practise__typetype)return models.AnswerLogs.objects.filter(qruery).exists()# 检查手动审核题目def checkAnswers(request):studentId request.GET.get(studentId)examId request.GET.get(examId)qruery Q(student__idstudentId)qruery qruery Q(exam__idexamId)qruery qruery Q(status0)qruery qruery Q(practise__type1)qruery qruery | Q(practise__type3)if AnswerLogsView.checkAnswerType(studentId, examId, 1):return BaseView.successData({flag: True, msg: 填空题还有未审核的内容})elif AnswerLogsView.checkAnswerType(studentId, examId, 3):return BaseView.successData({flag: True, msg: 编程题还有未审核的内容})else:return BaseView.successData({flag: False, msg: 手动审核部分已完成})# 添加答题记录transaction.atomicdef addInfo(request):answers request.POST.getlist(answers)nos request.POST.getlist(nos)practiseIds request.POST.getlist(practiseIds)examId request.POST.get(examId)token request.POST.get(token)for no in nos:models.AnswerLogs.objects.create(studentmodels.Users.objects.get(idcache.get(token)),exammodels.Exams.objects.get(idexamId),practisemodels.Practises.objects.get(idpractiseIds[int(no)-1]),status0,answeranswers[int(no)-1],nono)qruery Q(exam__idexamId);qruery qruery Q(student__idcache.get(token))models.ExamLogs.objects. \filter(qruery).update(status1)return BaseView.success()# 审核答题def aduitAnswer(request):if int(request.POST.get(type))1:models.AnswerLogs.objects. \filter(idrequest.POST.get(id)).update(status1,score2 if int(request.POST.get(flag))0 else 0,)else:models.AnswerLogs.objects. \filter(idrequest.POST.get(id)).update(status1,score20 if int(request.POST.get(flag))0 else 0,)return BaseView.success()
templatediv classlogin-bodydiv classlogin-windiv classlogin-formForm refloginForm :rulesrules :modelloginForm :label-width90FormItem propuserNameInput v-modelloginForm.userName placeholder请输入您的账号.../Input/FormItemFormItem proppassWordInput typepassword v-modelloginForm.passWord placeholder请输入您的密码.../Input/FormItemFormItem stylemargin-top: 50px;Button stylewidth:226px; clicksubmitForm(loginForm) classlogin-btn typeprimary用户登陆/Button/FormItem/Form/div/div/div
/templatestyle
.login-body{background-color: #2db7f5;background-image: url(../assets/2.jpg);position: fixed;left: 0;top: 0;bottom: 0;right: 0;
}
.login-win{position: absolute;top: 45%;left: 50%;transform: translate(-50%, -50%);width: 600px;height: 330px;padding: 15px;border-radius: 5px;border: 2px solid #fff;background-image: url(../assets/1.jpg);background-size: cover;
}
.login-form{position: absolute;left: 40%;top: 30%;width: 320px;
}
/stylescript
import initMenu from ../utils/menus.js;
import { login } from ../api/index.js;
export default {data() {return {loginForm: {userName: ,passWord: ,},rules: {userName: [{ required: true, message: 用户账号必须输入, trigger: blur }],passWord: [{ required: true, message: 用户密码必须输入, trigger: blur }],}}},methods: {submitForm (formName) {this.$refs[formName].validate((valid) {if (valid) {login(this.loginForm).then(res {if(res.code 0){this.$store.commit(setToken, res.data.token);sessionStorage.setItem(token, res.data.token);initMenu(this.$router, this.$store);this.$router.push(/welcome);}else{this.$Message.warning(res.msg);}});} else {return false;}})}},
}
/script源码代码
链接https://pan.baidu.com/s/10b83UvwFEA9b_47VJcJRMg 提取码1234