总述

今天是8月7日,实训的第15天。
上午孟老师演示了如何用Django做一个打分系统,先是分析需求——
打分系统需要满足:

  • 录入学生信息
  • 添加评委账号
  • 企业打分占比50%
  • 校内打分占比50%
  • 成绩汇总显示
  • 导出成绩 查询账号 可查分数 学号

下午主要是帮助同学们答疑。由于我的项目已经接近尾声,所以我比较闲,我也就跟着帮助同学了。

打分系统

数据库的建立

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from django.db import models

# Create your models here.
class UserTeacher(models.Model):
username =models.CharField(max_length=20,verbose_name='用户名')
password = models.CharField(max_length=20,verbose_name='密码')
nickname = models.CharField(max_length=20,verbose_name='昵称')
kind = models.IntegerField(verbose_name='是否企业老师') #0不是 1 是
def __str__(self):
return self.nickname
class Meta:
verbose_name = '教师账号'
verbose_name_plural = verbose_name

class StundentInfo(models.Model):
username = models.CharField(max_length=20,verbose_name='用户名')
password = models.CharField(max_length=20,verbose_name='密码',default='123456')
nickname = models.CharField(max_length=20,verbose_name='昵称')
score = models.IntegerField(verbose_name='总得分')
def __str__(self):
return self.username+"_"+self.nickname
class Meta:
verbose_name = '学生账号'
verbose_name_plural = verbose_name

class CompanyScore(models.Model):
score1 = models.IntegerField(verbose_name='寻求解决方案的能力')
score2 = models.IntegerField(verbose_name='综合应用分析的能力')
score3 = models.IntegerField(verbose_name='考虑社会等因素')
score4 = models.IntegerField(verbose_name='工具的选择和使用能力')
score5 = models.IntegerField(verbose_name='沟通交流能力')
score6 = models.IntegerField(verbose_name='考勤')
student = models.ForeignKey(StundentInfo,on_delete=models.CASCADE,verbose_name='学生')
teacher = models.ForeignKey(UserTeacher,on_delete=models.CASCADE,verbose_name='老师')
def __str__(self):
return self.student.nickname,self.teacher.nickname,self.student.username
class Meta:
verbose_name = '企业打分'
verbose_name_plural = verbose_name

class SchoolScore(models.Model):
score1 = models.IntegerField(verbose_name='实习日志')
score2 = models.IntegerField(verbose_name='实习报告')

视图的建立

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
from django.shortcuts import render,redirect
from api.models import *
from django.http import JsonResponse
from django.forms.models import model_to_dict
from django.views.decorators.csrf import csrf_exempt
# Create your views here.
@csrf_exempt
def login(request):
if request.method=='POST':
username = request.POST.get('username')
password = request.POST.get('password')
user_check=UserTeacher.objects.filter(username=username,password=password)
if user_check:
request.session['techer_id']=user_check.first().id
return redirect('/student_page/')
else:
return JsonResponse({'data': '登陆失败'})
else:
return render(request,'login.html')

@csrf_exempt
def make_score_by_company(request):
if request.method=='POST':
username=request.POST.get('username')
teacher_id=request.session['techer_id']
has_score=CompanyScore.objects.filter(teacher_id=teacher_id)
if not has_score:
student_id=StundentInfo.objects.get(username=username).id
systemDict = {}
for key in request.POST:
systemDict[key] = request.POST.get(key)
del systemDict['username']
CompanyScore.objects.create(**systemDict,teacher_id=teacher_id,student_id=student_id).save()
return JsonResponse({'data': '打分成功'})
else:
return JsonResponse({'data': '您已经为该同学打过分了,请勿重复打分'})
else:
return render(request, 'company_score.html')

def make_score_by_school(request):
if request.method=='POST':
username=request.POST.get('username')
teacher_id=request.session['techer_id']
has_score=SchoolScore.objects.filter(teacher_id=teacher_id)
if not has_score:
student_id=StundentInfo.objects.get(username=username).id
systemDict = {}
for key in request.POST:
systemDict[key] = request.POST.get(key)
del systemDict['username']
SchoolScore.objects.create(**systemDict,teacher_id=teacher_id,student_id=student_id).save()
return JsonResponse({'data': '打分成功'})
else:
return JsonResponse({'data': '您已经为该同学打过分了,请勿重复打分'})
else:
return render(request, 'shcool_score.html')

def score_all(request):
username = request.POST.get('username')
student_id = StundentInfo.objects.get(username=username).id
cs = CompanyScore.objects.filter(student_id=student_id)
ss = SchoolScore.objects.filter(student_id=student_id)
list_cs=[]
list_ss=[]
for c in cs:
list_cs.append(model_to_dict(c,exclude=['student_id','teacher_id']))
for s in ss:
list_ss.append(model_to_dict(s,exclude=['student_id','teacher_id']))
cs_all=zip(*map(lambda x: (x['score1'], x['score2'],x['score3'],x['score4'],x['score5'],x['score6']), list_cs))
sum_cs=0 #((1,2),(3,4),(5,6))
for index,i in enumerate(cs_all):
sum_cs+=sum(list(i))/len(i)
ss_all=zip(*map(lambda x: (x['score1'], x['score2'],x['score3']), list_ss))
sum_ss=0 #((1,2),(3,4),(5,6))
for index,i in enumerate(ss_all):
sum_ss+=sum(list(i))/len(i)
total_score = sum_cs + sum_ss
StundentInfo.objects.filter(username=username).update(score=total_score)
return JsonResponse({'data': '成绩核算成功'})

def student_list(request):
all_stus=StundentInfo.objects.all()

登录界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<div id="box">
<form action="/login/" method="post">
<div>用户名:<input id="username" type="text" name="username"></div>
<div>密码:<input id="password" type="password" name="password"></div>
<input type="submit" value="登陆">
</form>
</div>
</body>
</html>

学生列表界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学生列表</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

</head>
<body>
<table>
<thead>
<tr>
<td>序号</td>
<td>学号</td>
<td>姓名</td>
<td>操作</td>
</tr>
</thead>
<tbody>

</tbody>
</table>
</body>
<script>
$.ajax({
url:'/student_list/',
type:'get',
dataType:'json',
success:function (res) {
for(var i = 0;i<res.data.length;i++){
var htmlStr='<tr>\n' +
' <td>'+(i+1)+'</td>\n' +
' <td>'+res.data[i].username+'</td>\n' +
' <td>'+res.data[i].nickname+'</td>\n' +
' <td><button class="company">企业</button><button class="school">学校</button></td>\n' +
' </tr>'
$('tbody').append(htmlStr);
}
company();
},
})
function company(){
$(".company").click(function(){
var username=$(this).parent().parent().find('td:eq(1)').text();
window.location.href='/msbc/?username='+username+''
});
}
</script>
</html>

公司评分界面

寻求解决方案的能力
综合应用分析的能力
考虑社会等因素
工具的选择和使用能力
沟通交流能力
考勤
目前分

获取上一链接的参数

1
2
3
4
5
6
7
function getUrlParam(name) { //a标签跳转获取参数
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if(r != null) return decodeURI(r[2]);
return null;
}
var username = getUrlParam('username');