xadmin的使用

本文总阅读量

前记

Django自身带的admin功能众多,但基于admin开发的xadmin功能更完善,开发也简便且美观

配置

在seeting.py的INSTALLED_APPS引入xadmin

1
2
3
4
5
6
7
8
9
10
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'xadmin',
]

配置url

1
2
3
4
5
import xadmin

urlpatterns = [
url(r'^admin/', xadmin.site.urls),
]

使用

基本配置

新建一个.py文件,一般放在uesr app里面
配置页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import xadmin

# 主题设置
class BaseMyAdminView(object):
'''
enable_themes 启动更改主题
use_bootswatch 启用网上主题
'''
enable_themes = True
use_bootswatch = True

# 页面设置
class GlobalSettings(object):
'''
site_title 左上角名称
site_footer 底部名称
menu_style 更改左边样式
'''
site_title = "学习网后台管理系统"
site_footer = "学习网"
menu_style = "accordion"

# 注册函数
xadmin.site.register(views.BaseAdminView, BaseMyAdminView)
xadmin.site.register(views.CommAdminView, GlobalSettings)

2.定义自己的model在后台的显示

使用xadmin可以非常方便的定义我们的后台管理,在同样的自己定义的app文件增加如下代码:
一个简单的栗子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 引入自己的model
from .models import EmailVerifyRecord

class EmailVerifyRecordAdmin(object):
list_display = ['email', 'code', 'send_type', 'send_time'] # 选择需要显示的数据
search_fields = ['email', 'code', 'send_type'] # 选择可以搜索的数据
list_filter = ['email', 'code', 'send_type', 'send_time'] # 选择可以过滤的数据
model_icon = 'fa fa-address-book-o' # 选择该models在左边的图标显示,可以从该网页选择图标https://fontawesome.com/icons?d=gallery




# 同样进行注册
xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)

1.过滤器

过滤器除了如上的list_filter,还有其他属性
在 Model OptionClass 中设置以下属性:

  • list_filter 属性:
    该属性指定可以过滤的列的名字, 系统会自动生成搜索器
  • search_fields 属性:
    属性指定可以通过搜索框搜索的数据列的名字, 搜索框搜索使用的是模糊查找的方式, 一般用来搜素名字等字符串字段
  • free_query_filter 属性:
    默认为 True , 指定是否可以自由搜索. 如果开启自有搜索, 用户可以通过 url 参数来进行特定的搜索, 例如:
    http://xxx.com/xadmin/auth/user/?name__contains=tony

    2.图表

    在 Model OptionClass 中设定 data_charts 属性, 该属性为 dict 类型, key 是图表的标示名称, value 是图表的具体设置属性. 使用示例:
    1
    2
    3
    4
    5
    class RecordAdmin(object):
    data_charts = {
    "user_count": {'title': u"User Report", "x-field": "date", "y-field": ("user_count", "view_count"), "order": ('date',)},
    "avg_count": {'title': u"Avg Report", "x-field": "date", "y-field": ('avg_count',), "order": ('date',)}
    }
    图表的主要属性为:
  • title : 图表的显示名称
  • x-field : 图表的 X 轴数据列, 一般是日期, 时间等
  • y-field : 图表的 Y 轴数据列, 该项是一个 list, 可以同时设定多个列, 这样多个列的数据会在同一个图表中显示
  • order : 排序信息, 如果不写则使用数据列表的排序

3.书签

书签:记录数据列表页面特定的数据过滤, 排序等结果. 添加的书签还可以在首页仪表盘中作为小组件添加

在 Model OptionClass 中设定如下属性:

  • show_bookmarks 属性:
    设置是否开启书签功能, 默认为 True
  • list_bookmarks 属性:
    设置默认的书签. 用户可以在列表页面添加自己的书签, 你也可以实现设定好一些书签, 使用实例如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class UserAdmin(object):
    list_bookmarks = [{
    'title': "Female", # 书签的名称, 显示在书签菜单中
    'query': {'gender': True}, # 过滤参数, 是标准的 queryset 过滤
    'order': ('-age'), # 排序参数
    'cols': ('first_name', 'age', 'phones'), # 显示的列
    'search': 'Tom' # 搜索参数, 指定搜索的内容
    }, {...}
    ]

4.导出选项

ps:如果想要导出 Excel 数据, 需要安装 xlwt.

默认情况下, xadmin 会提供 Excel, CSV, XML, json 四种格式的数据导出. 可以通过设置 OptionClass 的 list_export 属性来指定使用哪些导出格式 (四种各使用分别用 xls, csv, xml, json 表示), 或是将 list_export 设置为 None 来禁用数据导出功能. 示例如下:

1
2
class MyModelAdmin(object):
list_export = ('xls', 'xml', 'json')

5.定时刷新

该插件在数据列表页面提供了定时刷新功能, 对于需要实时刷新列表页面查看即时数据的情况非常有用.

设置 OptionClass 的 refresh_times 属性即可实现自动刷新. refresh_times 属性是存有刷新时间的数组. xadmin 默认不开启该插件.示例如下:

1
2
3
class MyModelAdmin(object): 
# 这会显示一个下拉列表, 用户可以选择3秒或5秒刷新一次页面.
refresh_times = (3, 5)

6.数据详情

该插件可以在列表页中显示相关字段的详细信息, 使用 Ajax 在列表页中显示.(右边有个感叹号)

使用该插件主要设置 OptionClass 的 show_detail_fields, show_all_rel_details 两个属性. show_detail_fields 属性设置哪些字段要显示详细信息, show_all_rel_details 属性设置时候自动显示所有关联字段的详细信息, 该属性默认为 True. 示例如下:

1
2
3
class MyModelAdmin(object):

show_detail_fields = ['group', 'father', ...]

7.数据即时编辑

该插件可以在列表页中即时编辑某字段的值, 使用 Ajax 技术, 无需提交或刷新页面即可完成数据的修改, 对于需要频繁修改的字段(如: 状态)相当有用.

使用该插件主要设置 OptionClass 的 list_editable 属性. list_editable 属性设置哪些字段需要即时修改功能. 示例如下:

1
2
3
class MyModelAdmin(object):

list_editable = ['price', 'status', ...]

8.设置只读字段

在使用xadmin的时候,ModelAdmin默认只有对于model的增删改查,但是总是有些字段是不希望用户来编辑的。而 readonly_fields 设置之后不管是admin还是其他用户都会变成只读,而我们通常只是想限制普通用户。 这时我们就可以通过重写 get_readonly_fields 方法来实现对特定用户的只读显示。

1
2
3
4
5
6
7
8
9
class UserInfoAdmin():

def get_readonly_fields(self):
""" 重新定义此函数,限制普通用户所能修改的字段 """
if self.user.is_superuser:
self.readonly_fields = []
return self.readonly_fields

readonly_fields = ('user_email',)
查看评论