Django+Xadmin打造在线教育系统(二)

基于xadmin的后台管理

先使用pip进行安装xadmin及其依赖包

pip install django-adminx

安装完成后卸载xadmin,保留依赖包即可

pip uninstall django-adminx

需要对源码进行修改,将xadmin的源码下载下来

https://github.com/sshwsfc/xadmin/tree/django2

在项目根目录新建Python Package "extra_apps",把源码xadmin文件夹放到extra_apps文件夹下面,此时目录结构如下:

Django+Xadmin打造在线教育系统(二)

extra_apps加入系统路径

# settings.py

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

配置路由

from django.urls import path

from extra_apps import xadmin

urlpatterns = [
path('admin/', xadmin.site.urls),
]

将xadmin添加到INSTALLED_APPS

    'xadmin',
'crispy_forms',

数据库映射

python manage.py makemigrations

python manage.py migrate

创建管理员

python manage.py createsuperuser

运行,打开http://127.0.0.1:8000/admin进行访问

输入刚才创建的账号和密码即可进入后台管理系统


后台完善

在创建的四个app目录下新建adminx.py的文件,里面存放后台管理的一些东西,和admin.py中的写法类似,作用一样

course/adminx.py

# course/adminx.py

import xadmin

from .models import Course, Lesson, Video, CourseResource

# Course的admin管理器
class CourseAdmin(object):
'''课程''' list_display = [ 'name','desc','detail','degree','learn_times','students']
search_fields = ['name', 'desc', 'detail', 'degree', 'students']
list_filter = [ 'name','desc','detail','degree','learn_times','students'] class LessonAdmin(object):
'''章节''' list_display = ['course', 'name', 'add_time']
search_fields = ['course', 'name']
#这里course__name是根据课程名称过滤
list_filter = ['course__name', 'name', 'add_time'] class VideoAdmin(object):
'''视频''' list_display = ['lesson', 'name', 'add_time']
search_fields = ['lesson', 'name']
list_filter = ['lesson', 'name', 'add_time'] class CourseResourceAdmin(object):
'''课程资源''' list_display = ['course', 'name', 'download', 'add_time']
search_fields = ['course', 'name', 'download']
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)

operation/adminx.py

# operation/adminx.py

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'] # 将后台管理器与models进行关联注册。
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)

organization/adminx.py

# organization/adminx.py
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'] class CourseOrgAdmin(object):
'''机构''' list_display = ['name', 'desc', 'click_nums', 'fav_nums','add_time' ]
search_fields = ['name', 'desc', 'click_nums', 'fav_nums']
list_filter = ['name', 'desc', 'click_nums', 'fav_nums','city__name','address','add_time'] class TeacherAdmin(object):
'''老师''' list_display = [ 'name','org', 'work_years', 'work_company','add_time']
search_fields = ['org', 'name', 'work_years', 'work_company']
list_filter = ['org__name', 'name', 'work_years', 'work_company','click_nums', 'fav_nums', 'add_time'] xadmin.site.register(CityDict, CityDictAdmin)
xadmin.site.register(CourseOrg, CourseOrgAdmin)
xadmin.site.register(Teacher, TeacherAdmin)

users/adminx.py

# users/adminx.py
import xadmin from .models import EmailVerifyRecord,Banner #xadmin中这里是继承object,不再是继承admin
class EmailVerifyRecordAdmin(object):
# 显示的列
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导出csv乱码

将UTF-8改成gbk即可(xadmin/plugins/export.py)

Django+Xadmin打造在线教育系统(二)


xadmin全局配置

把全站的配置放在users\adminx.py

from xadmin import views
# 创建X admin的全局管理器并与view绑定。
class BaseSetting(object):
# 开启主题功能
enable_themes = True
use_bootswatch = True # 将全局配置管理与view绑定注册
xadmin.site.register(views.BaseAdminView, BaseSetting)
# x admin 全局配置参数信息设置
class GlobalSettings(object):
site_title = "慕课后台管理站"
site_footer = "imooc"
# 收起菜单
menu_style = "accordion"
# 将头部与脚部信息进行注册:
xadmin.site.register(views.CommAdminView, GlobalSettings)

左侧菜单英文变中文

修改每个apps.py文件

# users/apps.py
from django.apps import AppConfig class UsersConfig(AppConfig):
name = 'users'
verbose_name = '用户信息'

修改__init__.py文件

default_app_config = 'users.apps.UsersConfig'

将其他三个也进行修改

效果

Django+Xadmin打造在线教育系统(二)

自定义菜单顺序

# x admin 全局配置参数信息设置
class GlobalSettings(object):
site_title = "慕课后台管理站"
site_footer = "imooc"
# 收起菜单
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')},
)},)
上一篇:[转]iOS学习笔记(2)--Xcode6.1创建仅xib文件无storyboard的hello world应用


下一篇:Android 调用系统的邮箱app发送邮件