Django Admin 介绍
特点:权限管理、少前段样式、快速开发
Django具有杀手级自动化的后台管理系统,新建项目之后会自动新建APP为admin
建立后台管理系统的超级用户
#createsuperuser
setting配置
# 语言改为中文
LANGUAGE_CODE = 'zh-hans'
# 时区改为上海
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
# 数据库存储使用时间,True时间会被存为UTC的时间
USE_TZ = False
user/admin.py 注册定义的model,这样就可以在后台管理中看到(只需要几行代码,就可以注册到后台,非常方便)
# 因为同一个目录,所以可以直接.models
from .models import UserProfile
# 写一个管理器:命名, model+Admin
class UserProfileAdmin(admin.ModelAdmin):
pass
# 将UserProfile注册进我们的admin中, 并为它选择管理器
admin.site.register(UserProfile,UserProfileAdmin)
安装Xadmin
# pip install xadmin
setting中注册Xadmin(依赖于crispy_forms,也要注册),配置url.py
import xadmin
url(r'^xadmin/', xadmin.site.urls)
生成xadmin的数据表
# makemigrations
# migrate
以上为使用直接pip的xadmin, 接下来我们使用最新的源码安装xadmin, 这样可以使用xadmin新发布的一些功能, 而且也可以对源码进行修改。在github上面下载xadmin的源码, uninstall 之前安装xadmin
Xadmin的使用
在user下新建xadmin.py文件,注册user中类的信息,使得model中定义的数据表可以在xadmin后台显示
import xadmin
from .models import EmailVerifyRecord
# 创建admin的管理类,这里不再是继承admin,而是继承object
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']
model_icon = 'fa fa-envelope'
# 将model与admin管理器进行关联注册
xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
setting.py 中添加xadmin的根目录,保证源码安装的xadmin可以进行migrate
sys.path.insert(0,os.path.join(BASE_DIR, 'extra_apps'))
将其他的model在xadmin中注册:轮播图
# 创建banner的管理类
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']
model_icon = 'fa fa-group'
xadmin.site.register(Banner, BannerAdmin)
剩余app的注册
这一节多为复制粘贴工作,原理同上一节末尾,将每一个APP的model信息注册即可
courses/xadmin.py
from .models import Course, Lesson, Video, CourseResource, BannerCourse
import xadmin
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']
# __name代表使用外键中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']
# __name代表使用外键中name字段
list_filter = ['course__name', 'name', 'download', 'add_time']
# 将管理器与model进行注册关联
xadmin.site.register(BannerCourse, BannerCourseAdmin)
xadmin.site.register(Course, CourseAdmin)
xadmin.site.register(Lesson, LessonAdmin)
xadmin.site.register(Video, VideoAdmin)
xadmin.site.register(CourseResource, CourseResourceAdmin)
organization/xadmin.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', 'category', 'click_nums', 'fav_nums', 'add_time']
search_fields = ['name', 'desc', 'category', 'click_nums', 'fav_nums']
list_filter = ['name', 'desc', 'category', 'click_nums', 'fav_nums', 'city__name', 'address', 'add_time']
relfield_style = 'fk-ajax'
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)
operation/xadmin.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)
xadmin的全局配置
user/xadmin.py 配置后台主题功能
from xadmin import views
# 创建X admin的全局管理器并与view绑定。
class BaseSetting(object):
# 开启主题功能
enable_themes = True
use_bootswatch = True
# 将全局配置管理与view绑定注册
xadmin.site.register(views.BaseAdminView, BaseSetting)
user/xadmin.py 配置后台左上角名称、页面下方公司
class GlobalSettings(object):
site_title = "VictoriaJiang: 云教育后台管理站"
site_footer = "VictoriaJiang's Education"
# 收起菜单
menu_style = "accordion"
# 将头部与脚部信息进行注册:
xadmin.site.register(views.CommAdminView, GlobalSettings)
定义后台的名称
user/apps.py
class UsersConfig(AppConfig):
name = 'users'
verbose_name = u"用户信息"
同理设置其他app的名称