欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

(项目)在线教育平台(二)

程序员文章站 2022-07-01 23:37:57
四、xadmin后台管理系统 1、xadmin安装 首先在该网址下载xadmin的源码包:https://github.com/sshwsfc/xadmin/tree/django2 下载完成之后,将该安装包放在项目目录下进行安装:pip install xadmin-django2.zip 这时它 ......

四、xadmin后台管理系统

1、xadmin安装

  首先在该网址下载xadmin的源码包:https://github.com/sshwsfc/xadmin/tree/django2

  下载完成之后,将该安装包放在项目目录下进行安装:pip install xadmin-django2.zip

  这时它会安装许多xadmin相关的依赖包,然后在项目根目录下新建包extra_apps,将下载好的xadmin源码解压,将里面的xadmin文件拷贝到该包下,我们是用源码安装的方式,需要将xadmin卸载:pip uninstall xadmin

(项目)在线教育平台(二)

  我们使用的是源码的方式,需要将xadmin和crispy_forms配置进setting.py中的installed_apps中:

 1 installed_apps = [
 2     'django.contrib.auth',
 3     'django.contrib.contenttypes',
 4     'django.contrib.sessions',
 5     'django.contrib.messages',
 6     'django.contrib.staticfiles',
 7     'django.contrib.admin',
 8     'users',
 9     'course',
10     'organization',
11     'operation',
12     'xadmin',
13     'crispy_forms'
14 ]

  将extra_apps包mark成source root,并在settings.py中进行配置:

1 import os
2 import sys
3 
4 # build paths inside the project like this: os.path.join(base_dir, ...)
5 base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
6 sys.path.insert(0, os.path.join(base_dir, 'apps'))
7 sys.path.insert(0, os.path.join(base_dir, 'extra_apps'))

  然后配置xadmin的路由,在mxonline/urls.py文件中配置路由:

1 import xadmin
2 
3 urlpatterns = [
4     path('xadmin/', xadmin.site.urls),
5 ]

  然后就可以进行迁移数据库,生成xadmin后台管理所需的表,注意,如果提示runtimeerror,需要在installed_apps中配置django.contrib.admin。

  现在就可以使用xadmin后台管理系统了,不过要先创建一个管理员用户,打开run manage.py task,运行createsuperuser创建管理员用户:

(项目)在线教育平台(二)

  创建好之后就可以登录后台管理系统了:http://127.0.0.1:8000/xadmin/

(项目)在线教育平台(二)

  右侧都是英文,我们需要设置成中文显示,在settings.py文件中进行配置:

1 language_code = 'zh-hans'
2 
3 time_zone = 'asia/shanghai'
4 
5 use_i18n = true
6 
7 use_l10n = true
8 
9 use_tz = false

2、models注册

  现在需要将我们设计好的每个models中的表注册进后台管理系统中,以实现数据的增删改查。

2.1 user的model注册

  在users下面创建adminx.py文件,在该文件下编写注册代码:

 1 import xadmin
 2 
 3 from users.models import emailverifyrecord, banner
 4 
 5 
 6 class emailverifyrecordadmin(object):
 7     # 显示的列
 8     list_display = ['code', 'email', 'send_type', 'send_time']
 9     # 搜索的字段
10     search_fields = ['code', 'email', 'send_type']
11     # 过滤
12     list_filter = ['code', 'email', 'send_type', 'send_time']
13 
14 xadmin.site.register(emailverifyrecord, emailverifyrecordadmin)
15 
16 
17 class banneradmin(object):
18     list_display = ['title', 'image', 'url','index', 'add_time']
19     search_fields = ['title', 'image', 'url','index']
20     list_filter = ['title', 'image', 'url','index', 'add_time']
21 
22 xadmin.site.register(banner, banneradmin)

  刷新页面之后,左侧导航栏出现了邮箱验证码和轮播图的选项,还有自己设置的显示列表选项,筛选选项,搜索选项,界面显示如下: (项目)在线教育平台(二)

2.2 course的model注册

  在course下面创建adminx.py文件,在该文件下编写注册代码:

 1 import xadmin
 2 
 3 from .models import course, lesson, video, courseresourse
 4 
 5 class courseadmin(object):
 6     list_display = ['name','desc','detail','degree','learn_times','students']
 7     search_fields = ['name', 'desc', 'detail', 'degree', 'students']
 8     list_filter = ['name','desc','detail','degree','learn_times','students']
 9 
10 xadmin.site.register(course, courseadmin)
11 
12 
13 class lessonadmin(object):
14     list_display = ['course', 'name', 'add_time']
15     search_fields = ['course', 'name']
16     # course__name是根据课程名称进行过滤
17     list_filter = ['course__name', 'name', 'add_time']
18 
19 xadmin.site.register(lesson, lessonadmin)
20 
21 
22 class videoadmin(object):
23     list_display = ['lesson', 'name', 'add_time']
24     search_fields = ['lesson', 'name']
25     list_filter = ['lesson', 'name', 'add_time']
26 
27 xadmin.site.register(video, videoadmin)
28 
29 
30 class courseresourseadmin(object):
31     list_display = ['course', 'name', 'download', 'add_time']
32     search_fields = ['course', 'name', 'download']
33     list_filter = ['course__name', 'name', 'download', 'add_time']
34 
35 xadmin.site.register(courseresourse, courseresourseadmin)

2.3 organization的model注册

  在organization下面创建adminx.py文件,在该文件下编写注册代码:

 1 import xadmin
 2 
 3 from .models import citydict, courseorg, teacher
 4 
 5 
 6 class citydictadmin(object):
 7     list_display = ['name', 'desc', 'add_time']
 8     search_fields = ['name', 'desc']
 9     list_filter = ['name', 'desc', 'add_time']
10 
11 xadmin.site.register(citydict, citydictadmin)
12 
13 
14 class courseorgadmin(object):
15     list_display = ['name', 'desc', 'click_nums', 'fav_nums','add_time']
16     search_fields = ['name', 'desc', 'click_nums', 'fav_nums']
17     list_filter = ['name', 'desc', 'click_nums', 'fav_nums','city__name','address','add_time']
18 
19 xadmin.site.register(courseorg, courseorgadmin)
20 
21 
22 class teacheradmin(object):
23     list_display = ['name','org', 'work_years', 'work_company','add_time']
24     search_fields = ['org', 'name', 'work_years', 'work_company']
25     list_filter = ['org__name', 'name', 'work_years', 'work_company','click_nums', 'fav_nums', 'add_time']
26 
27 xadmin.site.register(teacher, teacheradmin)

2.4 operation的model注册

  在operation下面创建adminx.py文件,在该文件下编写注册代码:

 1 import xadmin
 2 
 3 from .models import userask, usermessage, coursecomments, usercourse, userfavorite
 4 
 5 
 6 class useraskadmin(object):
 7     list_display = ['name', 'mobile', 'course_name', 'add_time']
 8     search_fields = ['name', 'mobile', 'course_name']
 9     list_filter = ['name', 'mobile', 'course_name', 'add_time']
10 
11 xadmin.site.register(userask, useraskadmin)
12 
13 
14 class usermessageadmin(object):
15     list_display = ['user', 'message', 'has_read', 'add_time']
16     search_fields = ['user', 'message', 'has_read']
17     list_filter = ['user', 'message', 'has_read', 'add_time']
18 
19 xadmin.site.register(usermessage, usermessageadmin)
20 
21 
22 class coursecommentsadmin(object):
23     list_display = ['user', 'course', 'comments', 'add_time']
24     search_fields = ['user', 'course', 'comments']
25     list_filter = ['user', 'course', 'comments', 'add_time']
26 
27 xadmin.site.register(coursecomments, coursecommentsadmin)
28 
29 
30 class usercourseadmin(object):
31     list_display = ['user', 'course', 'add_time']
32     search_fields = ['user', 'course']
33     list_filter = ['user', 'course', 'add_time']
34 
35 xadmin.site.register(usercourse, usercourseadmin)
36 
37 
38 class userfavoriteadmin(object):
39     list_display = ['user', 'fav_id', 'fav_type', 'add_time']
40     search_fields = ['user', 'fav_id', 'fav_type']
41     list_filter = ['user', 'fav_id', 'fav_type', 'add_time']
42 
43 xadmin.site.register(userfavorite, userfavoriteadmin)

  至此,后台管理中所有的model注册完毕,界面显示如下:

(项目)在线教育平台(二)

3、xadmin的全局配置

  修改左上角的显示标题,还有最底部的我的公司,主题功能,app名称汉化、左侧菜单收叠,这些修改的配置都写进users/adminx.py文件中:

3.1 主题功能

1 from xadmin import views
2 
3 class basesetting(object):
4     """主题配置"""
5     enable_themes = true
6     use_bootswatch = true
7 
8 xadmin.site.register(views.baseadminview, basesetting)

  配置之后,后台管理界面的右上角出现了主题,可以进行主题更换:

(项目)在线教育平台(二)

3.2 logo、底部我的公司,菜单收叠

 1 class globalsetting(object):
 2     """ logo、底部我的公司,菜单收叠配置"""
 3     # logo
 4     site_title = '知能网在线教育后台管理'
 5     # 我的公司
 6     site_footer = '知能网'
 7     # 菜单收叠
 8     menu_style = 'accordion'
 9 
10 xadmin.site.register(views.commadminview, globalsetting)

  刷新页面之后,修改的地方如下:

(项目)在线教育平台(二)

3.3 app名称汉化

  修改每个模块中的app.py文件,以users/apps.py为例,在文件中添加verbose_name = '用户',修改内容如下:

1 from django.apps import appconfig
2 
3 
4 class usersconfig(appconfig):
5     name = 'users'
6     verbose_name = '用户管理'

  然后在__init__.py文件中引用app.py文件中的配置:

1 default_app_config = 'users.apps.usersconfig'

  然后依次修改其他模块中的内容,最后修改完,界面显示如下:

(项目)在线教育平台(二)