零基础使用Django2.0.1打造在线教育网站(十):后台管理配置

关于博主

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

                 微信公众号:  啃饼思录
                 QQ: 2810706745(啃饼小白)

写在前面

本篇笔记主要完善上篇笔记中遗留的其余3个apps的注册,还有xadmin的全局配置,让你打造一个属于自己的网站后台管理系统。

本篇笔记对应于第十篇代码,对应于github的位置是https://github.com/licheetools/eduline

其余3个apps的注册

courses的注册

我们打开eduline/apps/courses这个文件夹,在里面新建一个名为adminx.py的文件,我们准备开始进行app的注册,在其中添加如下代码:

import xadmin

from .models import Course, Lesson, Video, CourseResource


class CourseAdmin(object):
    list_display = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students', 'fav_nums', 'image', 'click_nums',
                    'add_time', 'get_zj_nums', 'go_to']  # 一次显示你想出现的多行数据
    search_fields = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students', 'fav_nums', 'image',
                     'click_nums']  # 查询你想要的数据
    list_filter = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students', 'fav_nums', 'image', 'click_nums',
                   'add_time']  # 过滤器


class LessonAdmin(object):
    list_display = ['course', 'name', 'add_time']  # 一次显示你想出现的多行数据
    search_fields = ['course', 'name']  # 查询你想要的数据
    list_filter = ['course__name', 'name', 'add_time']  # 过滤器,__name是外键的name字段,只写course则无法在过滤器中显示。


class VideosAdmin(object):
    list_display = ['lesson', 'name', 'add_time']  # 一次显示你想出现的多行数据
    search_fields = ['lesson', 'name']  # 查询你想要的数据
    list_filter = ['lesson', 'name', 'add_time']  # 过滤器,__name是外键的name字段,只写course则无法在过滤器中显示。


class CourseResourceAdmin(object):
    list_display = ['course', 'name', 'download', 'add_time']  # 一次显示你想出现的多行数据
    search_fields = ['course', 'name', 'download']  # 查询你想要的数据
    list_filter = ['course', 'name', 'download', 'add_time']  # 过滤器,__name是外键的name字段,只写course则无法在过滤器中显示。


xadmin.site.register(Course, CourseAdmin)
xadmin.site.register(Lesson, LessonAdmin)
xadmin.site.register(Video, VideosAdmin)
xadmin.site.register(CourseResource, CourseResourceAdmin)

运行一下你的项目,在浏览器地址栏中输入:

http://127.0.0.1:8000/xadmin

,回车一下:

organization的注册

我们打开eduline/apps/organization这个文件夹,在里面新建一个名为adminx.py的文件,我们准备开始进行app的注册,在其中添加如下代码:

import xadmin

from .models import CityDict, CourseOrg, Teacher


class CityDictAdmin(object):
    list_display = ['name', 'desc', 'add_time']  # 一次显示你想出现的多行数据
    search_fields = ['name', 'desc']  # 查询你想要的数据
    list_filter = ['name', 'desc', 'add_time']  # 过滤器,__name是外键的name字段,只写course则无法在过滤器中显示。


class CourseOrgAdmin(object):
    list_display = ['name', 'desc', 'click_nums', 'fav_nums', 'image', 'address', 'city', 'add_time']  # 一次显示你想出现的多行数据
    search_fields = ['name', 'desc', 'click_nums', 'fav_nums', 'image', 'address', 'city']  # 查询你想要的数据,记住尽量不要把时间放进去
    list_filter = ['name', 'desc', 'click_nums', 'fav_nums', 'image', 'address', 'city', 'add_time']  # 过滤器,__name是外键的name字段,只写course则无法在过滤器中显示。


class TeacherAdmin(object):
    list_display = ['org','name', 'work_years', 'work_company', 'work_position', 'points', 'click_nums', 'fav_nums', 'add_time']  # 一次显示你想出现的多行数据
    search_fields = ['org','name', 'work_years', 'work_company', 'work_position', 'points', 'click_nums', 'fav_nums']  # 查询你想要的数据,记住尽量不要把时间放进去
    list_filter = ['org','name', 'work_years', 'work_company', 'work_position', 'points', 'click_nums', 'fav_nums', 'add_time']  # 过滤器,__name是外键的name字段,只写course则无法在过滤器中显示。


xadmin.site.register(CityDict, CityDictAdmin)
xadmin.site.register(CourseOrg, CourseOrgAdmin)
xadmin.site.register(Teacher, TeacherAdmin)

运行一下你的项目,在浏览器地址栏中输入:http://127.0.0.1:8000/xadmin,回车一下:

operation的注册

我们打开eduline/apps/operation这个文件夹,在里面新建一个名为adminx.py的文件,我们准备开始进行app的注册,在其中添加如下代码:

import xadmin

from .models import UserAsk,CourseComments,UserFavorite,UserMessage,UserCourse


class UserAskAdmin(object):
    list_display = ['name', 'mobile', 'course_name', 'add_time']  # 一次显示你想出现的多行数据
    search_fields = ['name', 'mobile', 'course_name']  # 查询你想要的数据,记住尽量不要把时间放进去
    list_filter = ['name', 'mobile', 'course_name', 'add_time']  # 过滤器,__name是外键的name字段,只写course则无法在过滤器中显示。


class CourseCommentsAdmin(object):
    list_display = ['user', 'course', 'comments', 'add_time']  # 一次显示你想出现的多行数据
    search_fields = ['user', 'course', 'comments']  # 查询你想要的数据,记住尽量不要把时间放进去
    list_filter = ['user', 'course', 'comments', 'add_time']  # 过滤器,__name是外键的name字段,只写course则无法在过滤器中显示。


class UserFavoriteAdmin(object):
    list_display = ['user', 'fav_id', 'fav_type', 'add_time']  # 一次显示你想出现的多行数据
    search_fields = ['user', 'fav_id', 'fav_type']  # 查询你想要的数据,记住尽量不要把时间放进去
    list_filter = ['user', 'fav_id', 'fav_type', 'add_time']  # 过滤器,__name是外键的name字段,只写course则无法在过滤器中显示。


class UserMessageAdmin(object):
    list_display = ['user', 'message', 'has_read', 'add_time']  # 一次显示你想出现的多行数据
    search_fields = ['user', 'message', 'has_read']  # 查询你想要的数据,记住尽量不要把时间放进去
    list_filter = ['user', 'message', 'has_read', 'add_time']  # 过滤器,__name是外键的name字段,只写course则无法在过滤器中显示。


class UserCourseAdmin(object):
    list_display = ['user',  'course', 'add_time']  # 一次显示你想出现的多行数据
    search_fields = ['user',  'course']  # 查询你想要的数据,记住尽量不要把时间放进去
    list_filter = ['user',  'course', 'add_time']  # 过滤器,__name是外键的name字段,只写course则无法在过滤器中显示。


xadmin.site.register(UserAsk, UserAskAdmin)
xadmin.site.register(CourseComments, CourseCommentsAdmin)
xadmin.site.register(UserFavorite, UserFavoriteAdmin)
xadmin.site.register(UserMessage, UserMessageAdmin)
xadmin.site.register(UserCourse, UserCourseAdmin)

运行一下你的项目,在浏览器地址栏中输入:

http://127.0.0.1:8000/xadmin

,回车一下:

至此,我们所有的apps都已经注册完了。接下来我们就开始定制属于自己的后台管理系统吧。

xadmin的全局配置

开启主题功能

打开users/adminx.py文件,在里面添加如下代码:

from xadmin import views
# 创建xadmin的全局管理器并与view进行绑定
class BaseSetting(object):
    enable_themes = True  # 修改主题
    use_bootswatch = True    # 增加主题的可选内容

# 将全局配置管理与view进行绑定注册
xadmin.site.register(views.BaseAdminView, BaseSetting)

看到没,已经出现更换主题按钮了,你可以自定义喜欢的主题了:

后台管理名称配置

如图,我们需要修改站点标题,站点尾注,折叠菜单等以下内容:

为了更好地管理这些不变动的信息,我们依旧放在users/adminx.py文件里面。我们打开它,并在其中加入以下代码:

class GlobalSettings(object):
    site_title = '慕学后台管理系统'  # 站点标题
    site_footer = '慕海学习网'   # 站点尾注
    menu_style = 'accordion'   # 折叠收起菜单
# 将站点标题与站点尾注进行注册:
xadmin.site.register(views.CommAdminView, GlobalSettings)

刷新一下我们的网页,就变成了这个样子:

不知你发现没有,还有一个问题就是折叠后apps还是显示英文:

我们想变成中文,可以吗?答案是当然可以的!

配置apps的后台显示

打开每个app下面的apps.py文件,追加verbose_name信息。我们以users/apps.py为例,修改为如下:

from django.apps import AppConfig


class UsersConfig(AppConfig):
    name = 'users'
    verbose_name = '用户信息'

就是这个样子:

其余apps的apps.py文件修改如下:

courses/apps.py:

from django.apps import AppConfig

class CoursesConfig(AppConfig):
    name = 'courses'
    verbose_name = '课程管理'

operation/apps.py:

from django.apps import AppConfig

class OperationConfig(AppConfig):
    name = 'operation'
    verbose_name = '用户操作'

organization/apps.py:

from django.apps import AppConfig

class OrganizationConfig(AppConfig):
    name = 'organization'
    verbose_name = '机构管理'

再来刷新一下我们的页面,我们发现页面还是老样子,并没有出现与我们设想的页面,那是因为我们还没有配置信息,我们需要在每个app应用的--init--.py文件里加上引用apps的配置信息,就一行代码:default_app_config = "appname.apps.AppnameConfig" # 注意第二个Appname首字母大写。我们设置如下:

users/--init--.py:为例,记住是箭头2不是箭头1(箭头1是apps这个文件的)!!!

添加如下一行代码:

default_app_config = 'users.apps.UsersConfig'

courses/--init--.py:

default_app_config = 'courses.apps.CoursesConfig'

operation/--init--.py:

default_app_config = 'operation.apps.OperationConfig'

organization/--init--.py:

default_app_config = 'organization.apps.OrganizationConfig'

现在我们刷新一下我们的页面,成功了:

自定义菜单显示顺序

上面菜单的显示是根据我们注册的时间来显示的,我们可以自定义我们的菜单显示顺序:在users/adminx.py文件加上以下代码:

from users.models import EmailVerifyRecord, Banner, UserProfile
from courses.models import Course, CourseResource, Lesson, Video
from organization.models import CourseOrg, CityDict, Teacher
from operation.models import CourseComments, UserMessage, UserFavorite, UserCourse, UserAsk
from django.contrib.auth.models import Group, Permission
from xadmin.models import Log


class GlobalSettings(object):
    site_title = '慕学后台管理系统'
    site_footer = '慕海学习网'
    menu_style = 'accordion'

    def get_site_menu(self):
        return (
                {'title': '课程管理', 'menus': (
                    {'title': '课程信息', 'url': self.get_model_url(Course, 'changelist')},
                    {'title': '章节信息', 'url': self.get_model_url(Lesson, 'changelist')},
                    {'title': '视频信息', 'url': self.get_model_url(Video, 'changelist')},
                    {'title': '课程资源', 'url': self.get_model_url(CourseResource, 'changelist')},
                    {'title': '课程评论', 'url': self.get_model_url(CourseComments, 'changelist')},
                )},
                {'title': '机构管理', 'menus': (
                    {'title': '所在城市', 'url': self.get_model_url(CityDict, 'changelist')},
                    {'title': '机构讲师', 'url': self.get_model_url(Teacher, 'changelist')},
                    {'title': '机构信息', 'url': self.get_model_url(CourseOrg, 'changelist')},
                )},
                {'title': '用户管理', 'menus': (
                    {'title': '用户信息', 'url': self.get_model_url(UserProfile, 'changelist')},
                    {'title': '用户验证', 'url': self.get_model_url(EmailVerifyRecord, 'changelist')},
                    {'title': '用户课程', 'url': self.get_model_url(UserCourse, 'changelist')},
                    {'title': '用户收藏', 'url': self.get_model_url(UserFavorite, 'changelist')},
                    {'title': '用户消息', 'url': self.get_model_url(UserMessage, 'changelist')},
                )},

                {'title': '系统管理', 'menus': (
                    {'title': '用户咨询', 'url': self.get_model_url(UserAsk, 'changelist')},
                    {'title': '首页轮播', 'url': self.get_model_url(Banner, 'changelist')},
                    {'title': '用户分组', 'url': self.get_model_url(Group, 'changelist')},
                    {'title': '用户权限', 'url': self.get_model_url(Permission, 'changelist')},
                    {'title': '日志记录', 'url': self.get_model_url(Log, 'changelist')},
            )},)

xadmin.site.register(views.CommAdminView, GlobalSettings)

记住这段代码是和我们之前定义全局配置放在同一个函数里面的

注意:是from users.models import EmailVerifyRecord, Banner, UserProfile而不是:from apps.users.models import EmailVerifyRecord, Banner, UserProfile

RuntimeError: Model class apps.users.models.UserProfile doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

也就是说直接from users.models,不用再写上from apps.users.models。

最后我们运行一下我们的项目,在浏览器地址栏中输入:

http://127.0.0.1:8000/xadmin

,然后回车,就成了这个样子:

说明一下,这个日志记录就是用来记录我们之前进行过什么操作的文件。

你可能会问,这些apps的图片都是圆圈,我们可以自定义图标么?答案是当然了!

这里我就不介绍了,有兴趣的小伙伴们可以自己设置,这里我开启传送大门:xadmin管理员详情页面布局,导航图标设置

至此,我们自己专属的网站后台就搭建成功了,感谢你的赏阅!下一篇我们就正式进入到前端页面的配置了,主要解决用户注册,登录的问题。

本篇笔记对应于第十篇代码,对应于github的位置是https://github.com/licheetools/eduline

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程之旅

iOS开发——解析崩溃日志

在实际的开发过程中,作为开发者的我们常常会碰到一种场景,那就是真机调试时崩溃了,而有时又不能在Xcode中打印出崩溃信息,那么这时候我们就必须要获取到崩溃原因,...

1953
来自专栏张戈的专栏

博客文章重新启用评论,附一键填写评论中用户信息代码生成工具

博客关闭评论近一个月的时间,总体的感觉很是安逸,不过看了留言板的反馈,感觉关闭评论对一些真正需要帮助的朋友还是带来了些许不方便,思前考后,决定再次开放评论。 但...

3617
来自专栏沈唁志

如何加速WordPress网站

本指南提供了一个测试环境,用于说明优化WordPress的过程。环境有两个组成部分:

3743
来自专栏计算机编程

【vue随手笔记】Vue与ios UIwebview 和 Android webview 交互

7993
来自专栏FreeBuf

漏洞追踪:最新IE UXSS漏洞技术分析

最近David Leo在Full Disclosure上爆出了一个ie的 uxss 漏洞,可以绕过ie的同源策略。FreeBuf也有相关的报道(点我查看)。本文...

2067
来自专栏云飞学编程

Python爬虫技巧!网站有反爬?我们有selenium!

框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从...

6351
来自专栏游戏杂谈

Unity设置播放模式下始终先执行指定的场景

通过我们使用Unity开发游戏,是在PC/Mac上。而一个游戏通常也会有很多的场景,比如A、B、C、D三个场景,正常流程下的执行顺序是 A –> B –> C ...

5452
来自专栏乐百川的学习频道

Visual Studio Code介绍

应该有很多人都知道Atom编辑器吧,它是由Github开发的一个跨平台的编辑器。它使用了跨平台的Electron,用前端技术编写图形界面。一开始我也推荐过这个编...

2905
来自专栏ionic3+

ionic cordova resources问题说明

ionic cordova resources是用于一键打包生成各分辨率icon和splash的命令,在使用过程中可能会遇到以下问题:

1322
来自专栏wOw的Android小站

[iOS] Win8下在Vmware11中安装使用苹果系统OS X 10.10

  近来因为需要做 iOS 的项目,所以需要多花一些时间看看敲敲代码。因为自己手头上并没有 Mac(过年为了闲的时候能玩玩游戏买了联想,唉),想想不能只靠每天在...

1980

扫码关注云+社区

领取腾讯云代金券