mxonline实战2, 后台管理神器xadmin

 
 
 
对应github地址:xadmin的使用
 
第三天:xadmin的安装以及各应用模型的后台管理注册
 
 
一. 安装xamdin  
 
1. 源码包下载地址
找到压缩包位置,直接pip install xadmin-django2.zip,解压后把xamdin文件拷贝到新建的extra_apps中,同样mark成source root
 
2. 在settings.py中修改配置
添加sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps')
INSTALLED_APPS中添加xadmin,crispy_forms
 
3. mxonline/urls.py中修改admin为xadmin
 
4. 迁移数据库
python manage.py migrate
 
编辑用户bug
 
 
 
二. xadmin注册app
 
users模板中的UserProfile已经自动注册
 
1. 注册users模板中的EmailVerifyRecord,Banner
 
1.1首先在users中新建python file类型的adminx.py文件,添加内容如下
 
 
1.2. 解决EmailVerifyRecord object显示问题
新建一个邮箱后,后台只会显示EmailVerifyRecord object(1)这样的模式,如果想直接看到邮箱地址和验证码,需要在users/models.py中的邮箱验证类添加
 
 
1.3. 配置邮箱详情显示
修改users/adminx.py中的class EmailVerifyRecordAdmin(object)如下
list_display的类型可以用列表或元组。如果用元组,在只有一个元素的情况下,后面必须加逗号
 
 
1.4. 配置按条件搜索功能
users/adminx.py中的class EmailVerifyRecordAdmin(object)下添加
 
 
1.5. 配置按条件过滤功能
users/adminx.py中的class EmailVerifyRecordAdmin(object)下添加
 
 
 
 
1.6. 再加上users模块中Banner的注册的完整users/adminx.py代码
经验证list_display, search_fields, list_filter这3个名字不能变
 
 
 
 
2.  courses应用模型的注册
首先在courses中新建python file类型的adminx.py文件,添加内容如下
最好在course/models.py的每个类中加上__str__函数,用来在后台显示每部分的标题
# encoding = utf-8
__author__ = 'Administrator'

from .models import Course, Lesson, Video, CourseResource
import xadmin


# 定义courses中各模型类的管理器
class CourseAdmin(object):
    list_display = ['name', 'desc', 'detail', 'learn_times', 'students']
    search_fields = ['name', 'desc', 'detail', 'degree', 'student']
    list_filter = ['name', 'desc', 'degree', 'learn_times', 'students']


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


class VideoAdmin(object):
    list_display = ['name', 'lesson', 'add_time']
    search_fields = ['name', 'lesson']
    list_filter = ['name', 'lesson', 'add_time']


class CourseResourceAdmin(object):
    list_display = ['course', 'name', 'download', 'add_time']
    search_fields = ['course', 'name', 'download']
    # __name代表使用外键中的name字段
    list_filter = ['course__name', 'name', 'download', 'add_time']


# 将管理器与model进行关联注册
xadmin.site.register(Course, CourseAdmin)
xadmin.site.register(Lesson, LessonAdmin)
xadmin.site.register(Video, VideoAdmin)
xadmin.site.register(CourseResource, CourseResourceAdmin)

 

 
 
 
3. organization注册xadmin
新建organization/adminx.py,同样在organiztion/models.py各类下添加__str__函数
 
 
 
4. operation注册xadmin
新建operation/adminx.py,同样在operationtion/models.py各类下添加__str__函数,这个最好看一下__str__是怎么写的
# encoding = utf-8
__author__ = 'Administrator'

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


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']


class UserCourseAdmin(object):
    list_display = ['user', 'course', 'add_time']
    search_fields = ['user', 'course']
    list_filter = ['user', 'course', 'add_time']


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']


class CourseCommentsAdmin(object):
    list_display = ['user', 'course', 'comments', 'add_time']
    search_fields = ['user', 'course', 'comments']
    list_filter = ['user', 'course', 'comments', 'add_time']


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']

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

 

 
 
 
 
 
 
第四天.xamdin的功能应用
 
 
一.  使用xadmin的主题功能
 
就是会在后台页面上多一个Themes的主题选项,可以让我们更换后台主题
在users/admins.py中添加
 
 
二. 定义后台标题名,公司名字,各模块菜单收起来
 
 
三. 为每个app添加中文名,以courses为例子
 
1. courses/apps.py中添加一行verbose_name = "课程",如下
 
2. 在courses/__init__.py中添加 default_app_config = "courses.apps.CoursesConfig"
 
其他app做相似操作,其中__init__.py中的字段改成各模块相应的名字即可
 
 
 
四. 自定义后台各模块导航菜单顺序,并把模块中定义的名字显示在菜单中
 
需要在users/adminx.py中修改,注意下面几点:
 
1. 定义GlobalSettings类要继承views.BaseAdminView, 否则找不到自定义菜单中的get_model_url()函数,即class GlobalSettings(views.BaseAdminView)
2. 需要导入4个应用中的模块名
3. 注意系统管理中,我们把日志记录,用户分组,用户权限也划分到了菜单中
4. 注意views.CommAdminView,views.BaseAdminView的注册方式
 
 
users/adminx.py的完整代码如下
__author__ = 'Administrator'

import xadmin
from xadmin import views
from xadmin.models import Log

from django.contrib.auth.models import Group, Permission

from .models import EmailVerifyRecord, Banner, UserProfile
from organization.models import CourseOrg, City, Teacher
from operation.models import CourseComments, UserFavorite, UserMessage, UserCourse, UserAsk
from courses.models import Course, Video, Lesson, CourseResource


class BaseSetting(object):
    # 开启主题功能
    enable_themes = True
    use_bootswatch = True


class GlobalSettings(views.BaseAdminView):
    # 定义后台标题名
    site_title = "天尊的后台管理"
    # 定义页面底部的公司名
    site_footer = "hong's space"
    # 收起各模块菜单
    menu_style = "accordion"

    def get_site_menu(self):
        return(
            {'title': '机构管理', 'menus': (
                {'title': '所在城市', 'url': self.get_model_url(City, 'changelist')},
                {'title': '机构信息', 'url': self.get_model_url(CourseOrg, 'changelist')},
                {'title': '机构讲师', 'url': self.get_model_url(Teacher, 'changelist')},
            )},
            {'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(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')},
            )},
        )


class EmailVerifyRecordAdmin(object):
    # 这4个字段在models.py中都有定义
    list_display = ('code', 'email', 'send_type', 'send_time')
    # 配置可以按条件搜索的字段,不做按时间搜索
    search_fields = ['code', 'email', 'send_type']
    # 配置筛选字段
    list_filter = ['code', 'email', 'send_type', 'send_time']


class BannerAdmin(object):
    list_display = ['title', 'image', 'url', 'index', 'add_time']
    search_fields = ['title', 'image', 'url', 'index']
    list_filter = ['title', 'image', 'url', 'index', 'add_time']


xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
xadmin.site.register(Banner, BannerAdmin)
xadmin.site.register(views.CommAdminView, GlobalSettings)
xadmin.site.register(views.BaseAdminView, BaseSetting)

 

 

 

posted @ 2018-08-15 16:30  坚强的小蚂蚁  阅读(865)  评论(0编辑  收藏  举报