新建Django的时候已经自动生成后台管理系统
ip:端口/admin/
利用run manage.py Task生成超级管理员账号
Tools ---> run manage.py Task ---> createsuperuser ---> 按要求输入信息 ---> 生成管理员账号
登陆admin管理后台 ip:端口/admin/
修改后台管理系统为中文,修改拾取
在setting中修改:
LANGUAGE_CODE = 'zh-hans'
LANGUAGE_CODE = 'zh-cn' #Django1.7及1.7之前
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai' #修改时区
USE_I18N = True
USE_L10N = True
USE_TZ = False #True为国际时间
注册数据表到后台管理系统中
报错,出现问题
IntegrityError at /admin/users/userprofile/add/
(1452, 'Cannot add or update a child row: a foreign key constraint fails (`gmooc`.`django_admin_log`, CONSTRAINT `django_admin_log_user_id_c564eba6_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`))')
是makemigrations生成的initial文件还是原来的文件未更新造成的
xadmin的安装及使用
安装方法1:
pip install xadmin
安装方法2:
在github中下载源码进行安装,直接下载zip文件,解压后放在python根目录中(mark as source path),在setting 中加入 xadmin 路径
若下载出现问题:
python3安装xadmin出现 UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa4 in position 3444
参考文章
在setting的INSTALLED_APPS中注册 ‘xadmin’ 和第三方包 ‘crispy-forms’
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'courses',
'organization',
'operation',
'xadmin',
'crispy_forms', #注意是下划线不是横线
]
在urls中import urls ,并修改好urlpatterns,将url的pattern修改为xadmin,并把对应的服务器地址修改为xadmin
from django.conf.urls import url
from django.contrib import admin
import xadmin
import crispy_forms
urlpatterns = [
url(r'^xadmin/', xadmin.site.urls),
]
xadmin安装之后,需要同步一些表,直接使用makemigrations和migrate同步xadmin信息
登陆xadmin
利用xadmin进行model注册
在app中新建adminx.py文件,admin继承object,利用xadmin.site.register进行注册绑定
class EmailVerifyCodeAdmin(object):
pass
#利用 admin.site.register 进行注册
xadmin.site.register(EmailVerifyCode,EmailVerifyCodeAdmin)
class BannerAdmin(object):
pass
#利用 admin.site.register 进行注册
xadmin.site.register(Banner,BannerAdmin)
其他以此类推
数据展示调用
在 model.py中修改
python2.x 调用__unicode__(self)方法
python3.x 调用__str__(self)方法
在model中添加,利用”str“方法,完成调用str时候的展示。
def __str__(self):
return '{0}'.format(self.email)
自定义展示列、增加搜索功能、增加过滤器
在adminx.py的绑定中添加list_display方法,用于调用展示列,添加search_fields方法,用于增加搜索框,添加list_filter方法,用于增加过滤器
class EmailVerifyCodeAdmin(object):
list_display = ['code','email','send_time','send_type']
search_fields = ['code','email','send_time']
list_filter = ['code','email','send_time']
#利用 admin.site.register 进行注册
xadmin.site.register(EmailVerifyCode,EmailVerifyCodeAdmin)
class BannerAdmin(object):
list_display = ['url','img','index','title','add_time']
search_fields = ['url','img','index','title']
list_filter = ['url','img','index','title']
pass
#利用 admin.site.register 进行注册
xadmin.site.register(Banner,BannerAdmin)
注意新旧xadmin是不一样的,用老的库(xadmin)生成的数据表很有可能在新的库下是会报错的,例如xadmin.log
在各个app中使用adminx.py,完成剩余model的注册
organization
#_*_ conding:utf-8 _*_
import xadmin
from xadmin import views
from .models import CityDict,CourseOrganization,Teacher
class CityDictAdmin(object):
list_display = ['CityName','CityDescribe','AddTime']
search_fields = ['CityName','CityDescribe']
list_filter = ['CityName','CityDescribe','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(CityDict,CityDictAdmin)
class CourseOrganizationAdmin(object):
list_display = ['Organization','OrganizationDescribe','ClickNumber','FavoriteNumber','OrganizationImage','Address','City','AddTime']
search_fields = ['Organization','OrganizationDescribe','ClickNumber','FavoriteNumber','OrganizationImage','Address','City']
list_filter = ['Organization','OrganizationDescribe','ClickNumber','FavoriteNumber','OrganizationImage','Address','City','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(CourseOrganization,CourseOrganizationAdmin)
class TeacherAdmin(object):
list_display = ['BelongOrganization','TeacherName','WorkLife','WorkCompany','WorkPosition','Point','ClickNumber','FavoriteNumber','AddTime']
search_fields = ['BelongOrganization','TeacherName','WorkLife','WorkCompany','WorkPosition','Point','ClickNumber','FavoriteNumber']
list_filter = ['BelongOrganization','TeacherName','WorkLife','WorkCompany','WorkPosition','Point','ClickNumber','FavoriteNumber','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(Teacher,TeacherAdmin)
operation
# -*- coding: utf-8 -*-
from .models import UserAsk,CourseComment,UserFavorite,UserMessage,UserCourse
import xadmin
class UserAskAdmin(object):
list_display = ['UserName','MobileNumber','CourseName','AddTime']
search_fields = ['UserName','MobileNumber','CourseName']
list_filter = ['UserName','MobileNumber','CourseName','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(UserAsk,UserAskAdmin)
class CourseCommentAdmin(object):
list_display = ['User','Course','Comment','AddTime']
search_fields = ['User','Course','Comment']
list_filter = ['User','Course','Comment','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(CourseComment,CourseCommentAdmin)
class UserFavoriteAdmin(object):
list_display = ['User','FavoriteID','FavoriteType','AddTime']
search_fields = ['User','FavoriteID','FavoriteType']
list_filter = ['User','FavoriteID','FavoriteType','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(UserFavorite,UserFavoriteAdmin)
class UserMessageAdmin(object):
list_display = ['User','message','HasRead','AddTime']
search_fields = ['User','message','HasRead']
list_filter = ['User','message','HasRead','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(UserMessage,UserMessageAdmin)
class UserCourseAdmin(object):
list_display = ['User','Course','AddTime']
search_fields = ['User','Course']
list_filter = ['User','Course','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(UserCourse,UserCourseAdmin)
courses
# -*- coding: utf-8 -*-
from .models import Course,Lesson,Video,CourseResource
import xadmin
class CourseAdmin(object):
list_display = ['CourseName','degree','Lesson','CourseType','Students','FavouriteNumber','ClikeNumber','AddTime']
search_fields = ['CourseName','degree','Lesson','CourseType','Students','FavouriteNumber','ClikeNumber']
list_filter = ['CourseName','degree','Lesson','CourseType','Students','FavouriteNumber','ClikeNumber','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(Course,CourseAdmin)
class LessonAdmin(object):
list_display = ['Course','LessonName','AddTime']
search_fields = ['Course','LessonName']
#要在过滤条件中显示外键的子内容时,用双下划线
list_filter = ['Course__CourseName','LessonName','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(Lesson,LessonAdmin)
class VideoAdmin(object):
list_display = ['LessonName','VideoName','AddTime']
search_fields = ['LessonName','VideoName']
#要在过滤条件中显示外键的子内容时,用双下划线
list_filter = ['LessonName','VideoName','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(Video,VideoAdmin)
class CourseResourceAdmin(object):
list_display = ['Course','Name','DownLoad','AddTime']
search_fields = ['Course','Name','DownLoad']
#要在过滤条件中显示外键的子内容时,用双下划线
list_filter = ['Course','Name','DownLoad','AddTime']
#利用 admin.site.register 进行注册
xadmin.site.register(CourseResource,CourseResourceAdmin)
全局配置,在已注册的app中进行全局配置的设置
主题设置
import xadmin
from xadmin import views
class BaseSetting(object):
#主题功能,多种主题
enable_themes = True
use_bootswatch = True
#注册BaseSetting,需要与view绑定
xadmin.site.register(views.BaseAdminView,BaseSetting)
后台系统头部和底部标签的设置及菜单抽屉效果
class GlobalSettings(object):
#后台系统头部标签
site_title = "张馨"
#后台系统底部标签
site_footer = "叶嘉"
menu_style = "accordion"
xadmin.site.register(views.CommAdminView,GlobalSettings)
app名称修改(显示为中文或想要的内容)(老的xadmin该功能有bug)
users
#apps文件
# -*- coding: utf-8 -*-
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
verbose_name = '用户信息'
#init文件
default_app_config = 'users.apps.UsersConfig'
courses
#apps文件
# -*- coding: utf-8 -*-
from django.apps import AppConfig
class CoursesConfig(AppConfig):
name = 'courses'
verbose_name = '课程信息'
#init文件
default_app_config = 'courses.apps.CoursesConfig'
operation
#apps文件
# -*- coding: utf-8 -*-
from django.apps import AppConfig
class OperationConfig(AppConfig):
name = 'operation'
verbose_name = '用户操作'
#init文件
default_app_config = 'operation.apps.OperationConfig'
organization
#apps文件
# -*- coding: utf-8 -*-
from django.apps import AppConfig
class OrganizationConfig(AppConfig):
name = 'organization'
verbose_name = '组织机构'
#init文件
default_app_config = 'organization.apps.OrganizationConfig'
切记使用好str方法,在调用的时候正确显示字段,包括作为外键的时候,正确显示字段也是这个方法。
def __str__(self):
return '{0}'.format(self.email)