You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.5 KiB
124 lines
4.5 KiB
from datetime import datetime
|
|
from django.http import HttpResponse
|
|
from django.shortcuts import render, redirect
|
|
from django.urls import reverse
|
|
from exam import models
|
|
|
|
# Create your views here.
|
|
|
|
# 学生登录
|
|
def studentLogin(request):
|
|
if request.method == 'POST':
|
|
# 获取表单信息
|
|
sid = request.POST.get('sid')
|
|
password = request.POST.get('password')
|
|
print("sid", sid, "password", password)
|
|
# 通过学号获取该学生实体
|
|
student = models.Student.objects.get(sid=sid)
|
|
print(student)
|
|
if password == student.pwd: # 登录成功
|
|
request.session['username']=sid #user的值发送给session里的username
|
|
request.session['is_login']=True #认证为真
|
|
# 查询考试信息
|
|
paper = models.TestPaper.objects.filter(major=student.major)
|
|
# 查询成绩信息
|
|
grade = models.Record.objects.filter(sid=student.sid)
|
|
|
|
# 渲染index模板
|
|
return render(request, 'index.html', {'student': student, 'paper': paper, 'grade': grade})
|
|
else:
|
|
return render(request,'login.html',{'message':'密码不正确'})
|
|
elif request.method == 'GET':
|
|
return render(request, 'login.html')
|
|
else:
|
|
return HttpResponse("请使用GET或POST请求数据")
|
|
|
|
|
|
# 首页
|
|
def index(request):
|
|
if request.session.get('is_login',None): #若session认证为真
|
|
username = request.session.get('username',None)
|
|
print(username )
|
|
student = models.Student.objects.get(sid=username)
|
|
# 查询考试信息
|
|
paper = models.TestPaper.objects.filter(major=student.major)
|
|
return render(request, 'index.html',{'student': student,'paper': paper})
|
|
else:
|
|
return render(request, 'index.html')
|
|
|
|
|
|
|
|
def userfile(request):
|
|
if request.session.get('is_login',None): #若session认证为真
|
|
username = request.session.get('username',None)
|
|
print(username )
|
|
student = models.Student.objects.get(sid=username)
|
|
# 查询考试信息
|
|
paper = models.TestPaper.objects.filter(major=student.major)
|
|
return render(request, 'userfile.html',{'student': student})
|
|
|
|
|
|
|
|
#学生退出登录
|
|
def stulogout(request):
|
|
# logout(request)
|
|
request.session.clear()
|
|
url = reverse('index')
|
|
return redirect(url)
|
|
|
|
# 考试信息
|
|
def startExam(request):
|
|
sid = request.GET.get('sid')
|
|
title = request.GET.get('title') # 试卷名字 唯一
|
|
subject1 = request.GET.get('subject') # 考试科目
|
|
# 获取学生信息
|
|
student = models.Student.objects.get(sid=sid)
|
|
# 试卷信息
|
|
paper = models.TestPaper.objects.filter(title=title,course__course_name=subject1)
|
|
context = {
|
|
'student': student,
|
|
'paper': paper,
|
|
'title': title,
|
|
'subject':subject1,
|
|
'count': paper.count() # 数据表中数据的条数
|
|
}
|
|
return render(request, 'exam.html', context=context)
|
|
|
|
def examinfo(request):
|
|
if request.session.get('is_login',None): #若session认证为真
|
|
username = request.session.get('username',None)
|
|
student = models.Student.objects.get(sid=username)
|
|
# 查询成绩信息
|
|
grade = models.Record.objects.filter(sid=student.sid)
|
|
return render(request, 'examinfo.html',{'student': student,'grade': grade})
|
|
else:
|
|
return render(request, 'examinfo.html')
|
|
|
|
# 计算考试成绩
|
|
def calculateGrade(request):
|
|
if request.method == 'POST':
|
|
sid = request.POST.get('sid')
|
|
subject1 = request.POST.get('subject')
|
|
student = models.Student.objects.get(sid=sid)
|
|
paper = models.TestPaper.objects.filter(major=student.major)
|
|
grade = models.Record.objects.filter(sid=student.sid)
|
|
course = models.Course.objects.filter(course_name=subject1).first()
|
|
now = datetime.now()
|
|
# 计算考试成绩
|
|
questions = models.TestPaper.objects.filter(course__course_name=subject1).\
|
|
values('pid').values('pid__id','pid__answer','pid__score')
|
|
|
|
stu_grade = 0 # 初始化一个成绩
|
|
for p in questions:
|
|
qid = str(p['pid__id'])
|
|
stu_ans = request.POST.get(qid)
|
|
cor_ans = p['pid__answer']
|
|
if stu_ans == cor_ans:
|
|
stu_grade += p['pid__score']
|
|
models.Record.objects.create(sid_id=sid, course_id=course.id, grade=stu_grade,rtime=now)
|
|
context = {
|
|
'student': student,
|
|
'paper': paper,
|
|
'grade': grade
|
|
}
|
|
return render(request, 'index.html', context=context) |