Django+xadmin打造在线考试系统(三)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/id_iot/article/details/88864547

文章同步发于公众号:1024程序开发者社区(cxkfzsq1024)

上篇文章介绍了用户登录和注册界面设计两部分内容,本次将介绍其他页面组成路由关系和xadmin建立后台管理两部分内容。先上效果图:

/1/页面组成和路由关系

系统包含的页面包含以下六个:
首页是登陆后的界面,包含上端栏目,左侧栏目和主页面三个部分,左侧栏目可以选择“首页”、“历史成绩”、“个人中心”三个选项,主页面包含“退出登陆”和“开始考试”两个按钮,其中“开始考试”转到“试卷列表”页。
首页
试卷列表页目前包含随机考试(从题库中随机抽取一定数量题目)、我要训练两部分,也可以自定义一些固定试题。
试卷列表页
试卷页主要包含单选、多选、判断题型的显示和倒计时设计。
试卷页
成绩页主要显示考试成绩和错题列表,帮助巩固学习成果。
成绩页
历史成绩页可以查询自己的历史成绩,也可以设计管理员权限帮助管理员查看所有考生成绩。
历史成绩页
用户信息用于用户完善自身信息。
个人中心
本项目的url.py为:

urlpatterns = [
   path('xadmin/', xadmin.site.urls),
   path('login/', LoginView.as_view(),name='login'),
   path('register/', RegisterView.as_view(), name="register"),
   path('captcha/',include('captcha.urls')),
   path('index/', index,name="index"),
   path('paperlist/', PaperListView.as_view(), name="paper_list"),
   path('paper/<paper_id>/', PaperView.as_view(), name="paper"),
   path('select/', SelectView.as_view(), name="select"),
   path('train/', TrainView.as_view(), name="train"),
   path('history/', history, name="history"),
   path('user_center/', userviews, name="user_center"),
   path('logout/', LogoutView.as_view(), name="logout"),
]

/2/xadmin后台管理

通过xadmin进行后台管理,用来代替django自带的admin。
2.1 xadmin安装
pip install xadmin-django2
2.2 xadmin设置
新建Python Package “extra_apps”,把源码xadmin文件夹放到extra_apps文件夹下面,此时目录结构如下:
目录结构
把extra_apps右键mark为Source Root并在settings中加入

sys.path.insert(0,os.path.join(BASE_DIR,'extra_apps'))#extra_apps

2.3 配置路由
把admin改为xadmin

path('xadmin/', xadmin.site.urls)

2.4 注册APP

'xadmin',
'crispy_forms',

2.5 创建管理员账户
python manage.py createsuperuser
2.6 user app的models注册
(1)在users下面创建adminx.py,代码如下:

#主题注册
class BaseSetting(object): 
    enable_themes = True use_bootswatch = True #更改网站标题和公司名注册 
class GlobalSetting(object):
    site_title = u"***在线考试系统"
    site_footer = u"power by bc" 
    menu_style = "accordion" xadmin.site.register(views.BaseAdminView, 
    BaseSetting)#主题注册
    xadmin.site.register(views.CommAdminView, GlobalSetting)#更改网站标题和公司名注册

效果如图:
image
(2)在TOBC下面创建adminx.py,代码如下:

class CourseListAdmin(object): list_display = ['name', 'decs', 'add_time']
    search_fields = ['name', 'decs']
    list_filter = ['name', 'decs', 'add_time']

class QuestionAdmin(object): list_display = ['course','questionType', 'score', 'content', 'answer', 'choice_a', 'choice_b',
                    'choice_c', 'choice_d', 'note', 'boolt', 'boolf', 'add_time']
    search_fields = ['course__name','questionType', 'content', 'answer', 'choice_a', 'choice_b',
                     'choice_c', 'choice_d', 'note', 'boolt', 'boolf']
    list_filter = ['course','questionType', 'score', 'content', 'answer', 'choice_a',
                   'choice_b', 'choice_c', 'choice_d', 'note', 'boolt', 'boolf','add_time']

class PaperListAdmin(object): list_display = ['id','course','name', 'is_allow', 'add_time']
    search_fields = ['id','course__name', 'name', 'is_allow']
    list_filter = ['id','course','name', 'is_allow', 'add_time']

class PaperAdmin(object): list_display = ['course', 'paper_name', 'question', 'add_time']
    search_fields = ['course__name', 'paper_name__name', 'paper_name__id', 'paper_name__is_allow', 'question__id',
                     'question__content', 'question__answer']
    list_filter = ['course', 'paper_name', 'question__id', 'question__content','add_time','paper_name__name',]

xadmin.site.register(CourseList, CourseListAdmin)
xadmin.site.register(Question, QuestionAdmin)
xadmin.site.register(PaperList, PaperListAdmin)
xadmin.site.register(Paper, PaperAdmin)

效果如图:
image
(3)在operation下面创建adminx.py,代码如下:

扫描二维码关注公众号,回复: 7614271 查看本文章
class UserAnswerLogAdmin(object): list_display = ['user', 'paper', 'answer','score', 'add_time']
    search_fields = ['user__nick_name', 'user__username', 'paper__paper_name', 'answer', 'score']
    list_filter = ['user', 'paper', 'answer', 'score', 'add_time']

class UserScoreAdmin(object): list_display = ['user', 'paper', 'total', 'add_time']
    search_fields = ['user__nick_name', 'user__username', 'paper__paper_name', 'total']
    list_filter = ['user', 'paper', 'total','add_time']

xadmin.site.register(UserAnswerLog, UserAnswerLogAdmin)
xadmin.site.register(UserScore, UserScoreAdmin)

效果如图:
image
以上是建立在线考试系统的第三部分,本次内容就到这里,还请各路大神指点。

关注公众号,送海量学习资源,一起学django~

image

1024程序开发者社区的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里就技术问题进行交流,还没有加入的小伙伴可以扫描下方“社区物业”二维码,让管理员帮忙拉进群,期待大家的加入。

image

//猜你喜欢//

猜你喜欢

转载自blog.csdn.net/id_iot/article/details/88864547