Dango 之 Xadmin

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',)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值