作者主页:编程指南针
简介:Java领域优质创作者、CSDN博客专家Java项目、简历模板、学习资料、面试题库、技术互助
文末获取源码
项目编号:BS-Python-
1.项目说明
项目名称:智慧答题系统
项目版本:V1.0
版本变化:无
完成日期:年1月20日
2.系统环境
Windows或Linux发行版(Ubuntu16.04/CentOS等)
MySQL5.5以上版本
Python3.5以上版本
Redis任意新版本即可
Django版本2.1
本项目基于Python+Django技术开发实现,开发工具IDEA,数据库MYSQL5.7
主要实现题库设置,比赛生成,在线答题,自动排名,自动组卷,自动改卷等相关功能。
下面展示一下系统的相关功能:
用户注册
登陆
快速出题
配置比赛
上传题库
参与比赛
开始作题
自动阅卷排名
修改个人密码
查看所有比赛
以上是智慧校园比赛系统的主要内容
系统部分核心代码:
#-*-coding:utf-8-*-fromdjango.contrib.auth.modelsimportUserfromdjango.confimportsettingsfromdjango.dbimporttransactionfromdjango.views.decorators.csrfimportcsrf_exemptfromaccount.modelsimportProfilefrombusiness.modelsimportBusinessAccountInfofromutils.responseimportjson_responsefromutils.errorsimportBizError,UserErrordefcheck_biz(request):email=request.GET.get(email,)#获取邮箱try:#检查数据库中是否由该邮箱注册过的数据biz=BusinessAccountInfo.objects.get(email=email)exceptBusinessAccountInfo.DoesNotExist:biz=Nonereturnjson_response(,OK,{#返回是否已经被注册过和是否已经有此用户userexists:User.objects.filter(email=email).exists(),bizaccountexists:bool(biz)})
csrf_exempttransaction.atomicdefregistry_biz(request):email=request.POST.get(email,)#获取填写的邮箱name=request.POST.get(name,)#获取填写的机构名username=request.POST.get(username,)#获取填写的机构联系人phone=request.POST.get(phone,)#获取填写的手机号ctype=request.POST.get(type,BusinessAccountInfo.INTERNET)#获取机构类型flag=int(request.POST.get(flag,2))#获取一个标记位,代表用户是创建新用户还是使用绑定老用户的方式uname=email.split()[0]#和之前的注册逻辑没什么区别,创建一个账户名ifnotUser.objects.filter(username__exact=name).exists():final_name=usernameelifnotUser.objects.filter(username__exact=uname).exists():final_name=unameelse:final_name=emailifflag==2:#如果标记位是2,那么将为他创建新用户user=User.objects.create_user(username=final_name,email=email,password=settings.INIT_PASSWORD,is_active=False,is_staff=False)ifflag==1:#如果标记位是1,那么为他绑定老用户try:user=User.objects.get(email=email)exceptUser.DoesNotExist:returnjson_response(*UserError.UserNotFound)pvalues={phone:phone,name:final_name,user_src:Profile.COMPANY_USER,}profile,_=Profile.objects.select_for_update().get_or_create(email=email)#获取或创建用户信息fork,vinpvalues.items():setattr(profile,k,v)profile.save()bizvalues={