总述
今天是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
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='是否企业老师') 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
@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 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 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>
|
公司评分界面
寻求解决方案的能力
综合应用分析的能力
考虑社会等因素
工具的选择和使用能力
沟通交流能力
考勤
目前分