BS-Python-061 基于Python+Django实现在线考试系统

作者主页:编程千纸鹤

作者简介:Java、前端、Python开发多年,做过高程,项目经理,架构师

主要内容:Java项目开发、Python项目开发、大学数据和AI项目开发、单片机项目设计、面试技术整理、最新技术分享

收藏点赞不迷路  关注作者有好处

文末获得源码

 项目编号:BS-Python-061

一,环境介绍

语言环境:Python3.8

数据库:Mysql: mysql5.7

WEB框架:Django

爬虫框架:Scrapy

开发工具:IDEA或PyCharm

项目展示地址:基于Python实现在线考试系统

直接访问地址:

https://gf.bilibili.com/item/detail/1105851061

二,项目简介

本文首先实现了学生在线考试管理的发展,随后依照传统的软件开发流程,最先为系统挑选适用的语言和软件开发平台,依据需求分析开展控制模块制作和数据库查询构造设计,依据系统整体功能模块的设计,制作系统的功能模块图、流程表和E-R图。其次进行设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。

随着科学技术发展,计算机已成为人们生活中必不可少的生活办公工具,在这样的背景下,网络技术被应用到各个方面,为了提高办公生活效率,网络信息技术飞速发展。人类社会进入了全新的信息化时代。学生在线考试管理一直是信息管理的一大难题,学生在线考试信息数量多,此时寻找有效便捷的学生在线考试管理方法就是当务之急。而日趋成熟的计算机信息管理技术便成为解决这一难题的唯一之选。如今计算机信息管理技术来处理学生在线考试管理早已游刃有余,其实信息管理技术已经渗透到各个行业的信息控制管理当中,且有着举足轻重的地位。而随着现代化社会主义不断进步,普通群众生活水平有了大幅提高,很多方面都在网络上去实现,从而网络也就成为了最直接、即方便又快捷的接入口。

使用学生在线考试系统相对传统学生在线考试管理方式具备很多优点:首先可以大幅提高学生在线考试检索,只需输入相关信息就能在数秒内反馈想要的结果;其次可存储大量的学生在线考试信息,同时学生在线考试系统安全性有更高的保障;相比纸质文档来管理学生在线考试,学生在线考试系统更节省空间人力资源。这些优点大大提高管理效率并节省运营成本。因此,必须开发一个学生在线考试系统开展合理有效的管理方法,这提高了学生在线考试的效率和特性,增加了用户信息安全性,方便用户及时反馈信息给管理员,增加了用户之间的互动交流,更能提高用户的体验强度。

本系统为了数据库结构的灵活性所以打算采用MySQL来设计数据库[1],而Python技术[2], B/S架构则保证了较高的平台适应性。文中主要是讲解了该系统的开发环境、要实现的基本功能和开发步骤,并主要讲述了系统设计方案的关键点、设计思想。

管理员用例

用户功能

系统功能模块

三,系统展示

后台管理员

四,核心代码展示

#coding:utf-8
__author__ = "ila"
from django.db import models

from .model import BaseModel

from datetime import datetime



class yonghu(BaseModel):
    __doc__ = u'''yonghu'''
    __tablename__ = 'yonghu'

    __loginUser__='zhanghao'


    __authTables__={}
    __authPeople__='是'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段
    __loginUserColumn__='zhanghao'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段
    __sfsh__='是'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。
    __authSeparate__='否'#后台列表权限
    __thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段
    __intelRecom__='否'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询)
    __browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1
    __foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值
    __foreEndList__='否'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看
    __isAdmin__='否'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表)
    addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
    zhanghao=models.CharField ( max_length=255,null=False,unique=True, verbose_name='账号' )
    mima=models.CharField ( max_length=255,null=False, unique=False, verbose_name='密码' )
    xingming=models.CharField ( max_length=255,null=False, unique=False, verbose_name='姓名' )
    nianling=models.IntegerField  (  null=True, unique=False, verbose_name='年龄' )
    xingbie=models.CharField ( max_length=255, null=True, unique=False, verbose_name='性别' )
    shouji=models.CharField ( max_length=255, null=True, unique=False, verbose_name='手机' )
    touxiang=models.TextField   (  null=True, unique=False, verbose_name='头像' )
    zhuceziliao=models.TextField   (  null=True, unique=False, verbose_name='注册资料' )
    sfsh=models.CharField ( max_length=255, null=True, unique=False,default='待审核', verbose_name='是否审核' )
    shhf=models.TextField   (  null=True, unique=False, verbose_name='审核回复' )
    '''
    zhanghao=VARCHAR
    mima=VARCHAR
    xingming=VARCHAR
    nianling=Integer
    xingbie=VARCHAR
    shouji=VARCHAR
    touxiang=Text
    zhuceziliao=Text
    sfsh=VARCHAR
    shhf=Text
    '''
    class Meta:
        db_table = 'yonghu'
        verbose_name = verbose_name_plural = '用户'
class jiaoshi(BaseModel):
    __doc__ = u'''jiaoshi'''
    __tablename__ = 'jiaoshi'

    __loginUser__='jiaoshizhanghao'


    __authTables__={}
    __authPeople__='是'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段
    __loginUserColumn__='jiaoshizhanghao'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段
    __sfsh__='否'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。
    __authSeparate__='否'#后台列表权限
    __thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段
    __intelRecom__='否'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询)
    __browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1
    __foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值
    __foreEndList__='是'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看
    __isAdmin__='是'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表)
    addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
    jiaoshizhanghao=models.CharField ( max_length=255,null=False,unique=True, verbose_name='教师账号' )
    mima=models.CharField ( max_length=255,null=False, unique=False, verbose_name='密码' )
    jiaoshixingming=models.CharField ( max_length=255,null=False, unique=False, verbose_name='教师姓名' )
    nianling=models.IntegerField  (  null=True, unique=False, verbose_name='年龄' )
    xingbie=models.CharField ( max_length=255, null=True, unique=False, verbose_name='性别' )
    lianxidianhua=models.CharField ( max_length=255, null=True, unique=False, verbose_name='联系电话' )
    touxiang=models.TextField   (  null=True, unique=False, verbose_name='头像' )
    '''
    jiaoshizhanghao=VARCHAR
    mima=VARCHAR
    jiaoshixingming=VARCHAR
    nianling=Integer
    xingbie=VARCHAR
    lianxidianhua=VARCHAR
    touxiang=Text
    '''
    class Meta:
        db_table = 'jiaoshi'
        verbose_name = verbose_name_plural = '教师'
class kechengxinxi(BaseModel):
    __doc__ = u'''kechengxinxi'''
    __tablename__ = 'kechengxinxi'



    __authTables__={'jiaoshizhanghao':'jiaoshi',}
    __authPeople__='否'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段
    __sfsh__='否'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。
    __authSeparate__='否'#后台列表权限
    __thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段
    __intelRecom__='是'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询)
    __browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1
    __foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值
    __foreEndList__='是'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看
    __isAdmin__='否'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表)
    addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
    kechengmingcheng=models.CharField ( max_length=255,null=False, unique=False, verbose_name='课程名称' )
    kechengfenlei=models.CharField ( max_length=255,null=False, unique=False, verbose_name='课程分类' )
    kaikeshijian=models.DateTimeField  (  null=True, unique=False, verbose_name='开课时间' )
    keshi=models.CharField ( max_length=255, null=True, unique=False, verbose_name='课时' )
    jiaoshizhanghao=models.CharField ( max_length=255, null=True, unique=False, verbose_name='教师账号' )
    jiaoshixingming=models.CharField ( max_length=255, null=True, unique=False, verbose_name='教师姓名' )
    kechengneirong=models.TextField   (  null=True, unique=False, verbose_name='课程内容' )
    clicktime=models.DateTimeField  (  null=True, unique=False, verbose_name='最近点击时间' )
    '''
    kechengmingcheng=VARCHAR
    kechengfenlei=VARCHAR
    kaikeshijian=DateTime
    keshi=VARCHAR
    jiaoshizhanghao=VARCHAR
    jiaoshixingming=VARCHAR
    kechengneirong=Text
    clicktime=DateTime
    '''
    class Meta:
        db_table = 'kechengxinxi'
        verbose_name = verbose_name_plural = '课程信息'
class exampaper(BaseModel):
    __doc__ = u'''exampaper'''
    __tablename__ = 'exampaper'



    __authTables__={}
    addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
    name=models.CharField ( max_length=255,null=False, unique=False, verbose_name='试卷名称' )
    time=models.IntegerField  ( null=False, unique=False, verbose_name='考试时长(分钟)' )
    status=models.IntegerField  ( null=False, unique=False,default='0', verbose_name='试卷状态' )
    '''
    name=VARCHAR
    time=Integer
    status=Integer
    '''
    class Meta:
        db_table = 'exampaper'
        verbose_name = verbose_name_plural = '试卷表'
class examquestion(BaseModel):
    __doc__ = u'''examquestion'''
    __tablename__ = 'examquestion'



    __authTables__={}
    addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
    paperid=models.BigIntegerField  ( null=False, unique=False, verbose_name='所属试卷id(外键)' )
    papername=models.CharField ( max_length=255,null=False, unique=False, verbose_name='试卷名称' )
    questionname=models.CharField ( max_length=255,null=False, unique=False, verbose_name='试题名称' )
    options=models.TextField   (  null=True, unique=False, verbose_name='选项,json字符串' )
    score=models.BigIntegerField  (  null=True, unique=False,default='0', verbose_name='分值' )
    answer=models.CharField ( max_length=255, null=True, unique=False, verbose_name='正确答案' )
    analysis=models.TextField   (  null=True, unique=False, verbose_name='答案解析' )
    type=models.BigIntegerField  (  null=True, unique=False,default='0', verbose_name='试题类型,0:单选题 1:多选题 2:判断题 3:填空题(暂不考虑多项填空)' )
    sequence=models.BigIntegerField  (  null=True, unique=False,default='100', verbose_name='试题排序,值越大排越前面' )
    '''
    paperid=BigInteger
    papername=VARCHAR
    questionname=VARCHAR
    options=Text
    score=BigInteger
    answer=VARCHAR
    analysis=Text
    type=BigInteger
    sequence=BigInteger
    '''
    class Meta:
        db_table = 'examquestion'
        verbose_name = verbose_name_plural = '试题表'
class examrecord(BaseModel):
    __doc__ = u'''examrecord'''
    __tablename__ = 'examrecord'



    __authTables__={}
    __authSeparate__='是'#后台列表权限
    __foreEndListAuth__='是'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值
    __examinationPaper__='是'#[examinationPaper:是/否]后台生成普通试卷功能
    addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
    userid=models.BigIntegerField  ( null=False, unique=False, verbose_name='用户id' )
    username=models.CharField ( max_length=255, null=True, unique=False, verbose_name='用户名' )
    paperid=models.BigIntegerField  ( null=False, unique=False, verbose_name='试卷id(外键)' )
    papername=models.CharField ( max_length=255,null=False, unique=False, verbose_name='试卷名称' )
    questionid=models.BigIntegerField  ( null=False, unique=False, verbose_name='试题id(外键)' )
    questionname=models.CharField ( max_length=255,null=False, unique=False, verbose_name='试题名称' )
    options=models.TextField   (  null=True, unique=False, verbose_name='选项,json字符串' )
    score=models.BigIntegerField  (  null=True, unique=False,default='0', verbose_name='分值' )
    answer=models.CharField ( max_length=255, null=True, unique=False, verbose_name='正确答案' )
    analysis=models.TextField   (  null=True, unique=False, verbose_name='答案解析' )
    myscore=models.BigIntegerField  ( null=False, unique=False,default='0', verbose_name='试题得分' )
    myanswer=models.CharField ( max_length=255, null=True, unique=False, verbose_name='考生答案' )
    '''
    userid=BigInteger
    username=VARCHAR
    paperid=BigInteger
    papername=VARCHAR
    questionid=BigInteger
    questionname=VARCHAR
    options=Text
    score=BigInteger
    answer=VARCHAR
    analysis=Text
    myscore=BigInteger
    myanswer=VARCHAR
    '''
    class Meta:
        db_table = 'examrecord'
        verbose_name = verbose_name_plural = '考试记录表'

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程千纸鹤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值