xadmin 是Django的第三方扩展后台管理工具,比使用Django的admin站点更强大也更方便。
官方文档
1. 安装与基础配置
通过以下命令安装最新版本(推荐加源提升下载速度)
pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 -i https://pypi.tuna.tsinghua.edu.cn/simple
下载完成后,在配置文件中注册(“xadmin”,“crispy_froms”,“reversion”)应用:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'xadmin',
'crispy_forms',
'reversion',
'home',
]
# 修改使用中文界面
LANGUAGE_CODE = 'zh-Hans'
# 修改时区
TIME_ZONE = 'Asia/Shanghai'
xadmin有建立自己的数据库模型,需要进行数据库迁移。
python manage.py makemigrations
python manage.py migrate
在总路由中添加xadmin的路由信息
import xadmin
xadmin.autodiscover()
# version模块自动注册需要版本控制的 Model
from xadmin.plugins import xversion
xversion.register_models()
urlpatterns = [
path(r'xadmin/', xadmin.site.urls),
]
如果之前没有创建超级用户,需要创建;如果已有,可直接使用登录后台
python manage.py createsuperuser
2.使用
- xadmin不再使用 Django的admin.py,而是需要编写代码在adminx.py文件中。
- xadmin的站点管理类不用继承 admin.ModelAdmin, 而是直接继承object即可。
例如在子应用home下创建adminx.py文件(注意不能命名为 xadmin.py !!!)
站点全局配置
import xadmin
from xadmin import views
class BaseSetting(object):
"""xadmin的基本配置"""
enable_themes = True # 开启主题切换功能
use_bootswatch = True # 引导控制菜单
xadmin.site.register(views.BaseAdminView, BaseSetting)
class GlobalSettings(object):
"""xadmin的全局配置"""
site_title = "甜甜资讯" # 设置站点标题
site_footer = "真甜couple出品" # 设置站点的页脚
menu_style = "accordion" # 设置菜单折叠
xadmin.site.register(views.CommAdminView, GlobalSettings)
效果如下:
注册子应用下模型到xadmin中
在当前子应用下创建 adminx.py,添加如下代码
from .models import BannerInfo
class BannerInfoModelAdmin(object):
list_display = ['title', 'orders', 'is_show'] # 设置模型显示的字段
xadmin.site.register(BannerInfo, BannerInfoModelAdmin)
更改子应用在后台管理中的名称
子应用/apps.py
class HomeConfig(AppConfig):
name = 'home'
verbose_name = '我的首页' # 子应用在后台站点的显示名称
子应用/init.py
default_app_config = "home.apps.HomeConfig" # home是子应用名称
3.其他功能使用
定时刷新、数据详情
from .models import BannerInfo
class BannerInfoModelAdmin(object):
list_display = ['title', 'orders', 'is_show'] # 设置模型显示的字段
show_detail_fields = ['title'] # 设置显示数据详情
refresh_times = [3, 5, 7 ] #设置定时刷新时间
xadmin.site.register(BannerInfo, BannerInfoModelAdmin)
书签
数据列表页面特定的数据过滤,排序等结果,添加的书签还可以在首页仪表盘中作为小组件添加。
在 Model OptionClass中设定如下属性:
- show_bookmarks
设置是否开启书签功能,默认为True - list_bookmarks
设置默认的书签. 用户可以在列表页面添加自己的书签, 你也可以实现设定好一些书签, 使用实例如下:
class UserInfoAdmin(object):
list_display = ('user_name', 'user_email', 'user_mobile')
show_detail_fields = ['user_name']
refresh_times = (3, 5, 7)
list_bookmarks = [{
'title': "存在邮箱",
“query”: {"user_email_contains": '@'},
"order": ("-user_name",),
"cols": ('user_name', 'user_email', 'user_mobile'),
}]
效果如下:
图表
在数据列表页面,根据列表数据生成图表,可以指定多个数据列,生成多个图表。
在Model OptionClass 中设定data_charts属性,该属性为dict类型,key是图表的标示名称,value是图表的具体设置属性;
图标主要属性(key-value):
-
title : 图表的显示名称
-
x-field : 图表的 X 轴数据列, 一般是日期, 时间等
-
y-field : 图表的 Y 轴数据列, 该项是一个 list, 可以同时设定多个列, 这样多个列的数据会在同一个图表中显示
-
order : 排序信息, 如果不写则使用数据列表的排序
示例:
效果
数据导出
如果想要导出Excel数据,需要安装xlwt。
默认情况下,xadmin会提供Excel,CSV,XML,json四种格式的数据导出,可以通过设置OptionClass的list_export属性来指定使用哪些导出格式(四种格式分别用xls,csv,xml,json表示)或是将list_export设置为None来禁用数据导出功能。
过滤
在 Model OptionClass 中设置以下属性:
-
list_filter 属性:
该属性指定可以过滤的列的名字, 系统会自动生成搜索器
-
search_fields 属性:
属性指定可以通过搜索框搜索的数据列的名字, 搜索框搜索使用的是模糊查找的方式, 一般用来搜素名字等字符串字段
-
free_query_filter 属性:
默认为 True , 指定是否可以自由搜索. 如果开启自由搜索, 用户可以通过 url 参数来进行特定的搜索, 例如:
http://xxx.com/xadmin/auth/user/?name__contains=tony
设置只读字段
在使用xadmin的时候,ModelAdmin默认只有对于model的增删改查,但是总是有些字段是不希望用户来编辑的。而 readonly_fields 设置之后不管是admin还是其他用户都会变成只读,而我们通常只是想限制普通用户。 这时我们就可以通过重写 get_readonly_fields 方法来实现对特定用户的只读显示。
示例
class UserInfoAdmin():
def get_readonly_fields(self):
""" 重新定义此函数,限制普通用户所能修改的字段 """
if self.user.is_superuser:
self.readonly_fields = []
return self.readonly_fields
readonly_fields = ('user_email',)