zoukankan      html  css  js  c++  java
  • (项目)在线教育平台(二)

    四、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'

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

  • 相关阅读:
    [数据结构]线性表
    对C语言中指针的一些新认识
    Qt做动画旋转旋转图片
    延时程序执行Qt
    关于部分网页打不可的问题
    关于QString中的arg()函数使用方法
    Qt5.3.0 for Android开发环境配置
    QMenu,contextmenuevent,窗体透明
    Qt自定义窗体,边框,圆角窗体
    一个良好的团队
  • 原文地址:https://www.cnblogs.com/Sweltering/p/9951259.html
Copyright © 2011-2022 走看看