0%

Xadmin使用教程

前言:

直接替代Django自带的站点管理(admin),并带来了很多实用的东西,完全可扩展的插件支持,基于Twitter Bootstrap的漂亮UI。
Python版本:3.6.8
django-import-export版本:1.2.0
Xadmin版本:0.6.1


Xadmin特点

  • 完全替代Django admin
  • 支持基于Twitter Bootstrap的UI主题
  • 支持可扩展的插件
  • 更好的过滤器,日期范围,数量范围等
  • 内置xls,csv,xml和json格式数据导出
  • 具有窗口小部件支持的仪表板页面
  • 现场书签
  • 完整的CRUD方法

Xadmin安装

  • 最好通过PyPI安装Xadmin。要安装最新版本,请运行:

    1
    pip install xadmin
  • 或从github来源安装:(如果第一种方式安装失败,建议使用该方法安装)

    1
    pip install git+git://github.com/sshwsfc/xadmin.git
  • 从Django 2.0的github源安装:

    1
    pip install git+git://github.com/sshwsfc/xadmin.git@django2
  • 注意事项:

    1. 如果第一种方式安装失败则尝试第二种方式(如果第一种方式已安装xadmin记得先卸载再尝试第二种方式)
    2. 如果使用第二种方式安装出现django-import-export版本错误,则卸载掉已安装的django-import-exportxadmin,然后去django-import-export官网查看适合自己的版本再单独安装django-import-export,最后再使用第二种方法安装Xadmin
    3. 通过githup上搜索xadmin,直接下载源码包,只需把下载文件中的xadmin文件夹拷贝到项目根目录配置便可以使用,当然得把pip安装得xadmin卸载后使用的才是导入的源码包pip uninstall xadmin(推荐,当xadmin的新功能还没有发布到pypi上时,可以优先使用,当然,最主要的是我们可以查看源码,更加容易理解xadmin的功能,并在不断学习中进步)

Xadmin配置

  1. 激活应用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myApp.apps.MyappConfig',
    'xadmin',
    'crispy_forms',
    'reversion',
    ]
  2. 主路由配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    from django.conf.urls import url, include
    from django.contrib import admin
    import xadmin

    urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^xadmin/', xadmin.site.urls),
    url(r'^', include('myApp.urls', namespace='sunck')),
    ]
  3. 迁移文件

    1
    2
    python manage.py makemigrations
    python manage.py migrate
  4. 创建管理员用户

    1
    python manage.py createsuperuser

    按顺序输入用户名、邮箱、密码

  5. 登录

    • 启动服务

      1
      python manage.py runserver
    • 在浏览器地址栏输入

      1
      http://127.0.0.1:8000/admin
    • 输入账号和密码登录

  6. 配置中文显示

    1
    2
    3
    LANGUAGE_CODE = 'zh-Hans'

    TIME_ZONE = 'Asia/Shanghai'

    修改 settings.py 文件

  7. 管理表数据

    • 将要管理的表添加到应用目录下的 admin.py文件中进行注册

      1
      2
      3
      4
      5
      6
      7
      import xadmin
      # 引入要管理的模型类
      from myApp.models import Student, Grade

      # Register your models here.
      xadmin.site.register(Student)
      xadmin.site.register(Grade)
  8. 自定义管理界面

    • 属性说明

      • list_display:显示字段,可以点击进行排序,属性排列顺序
      • list_filter:过滤字段,过滤框出现在页面右侧
      • search_fields:搜索字段,搜索框会出现在列表上方
      • list_per_page:分页显示,确定每页有多少条数据
      • actions_on_top:执行动作框是否显示在上方
      • actions_on_bottom:执行动作框是否显示在下方
      • model_icon:相应表图标配置,https://fontawesome.com/icons
      • show_detail_fields:显示详情
      • refresh_times:数据刷新时间
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        # Register your models here.
        class StudentAdmin(object):
        # 列表页属性
        list_display = ['pk', 'name', 'age', 'sex', 'grade', 'content', 'isDelete']
        list_filter = ["grade", "age"]
        search_fields = ["name"]
        list_per_page = 10

        # 相应表图标配置
        # https://fontawesome.com/icons
        model_icon = 'fa fa-address-book'
        # 显示详情
        show_detail_fields = ['name']
        # 数据刷新时间
        refresh_times = (3, 5)

        # 执行动作框的位置
        actions_on_top = False
        actions_on_bottom = True


        xadmin.site.register(Student, StudentAdmin)
    • 全局设置

      • site_title:后台名称(左上角名称)
      • site_footer:页脚设置
      • menu_style:左侧栏折叠样式
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        class GlobalSetting(object):
        # 页头
        site_title = '学生班级管理系统'
        # 页脚
        site_footer = 'By苏寅'
        # 左侧栏折叠样式
        menu_style = 'accordion'
        # 设置models的全局图标


        xadmin.site.register(views.BaseAdminView, BaseSetting)
    • 主题配置

      • 注册与表注册不同,需要将类和views.BaseAdminView绑定,且顺序与表相反

        1
        2
        3
        4
        5
        6
        7
        8
        9
        class BaseSetting(object):
        '''
        主题样式多样化
        '''
        enable_themes = True
        use_bootswatch = True


        xadmin.site.register(views.BaseAdminView, BaseSetting)
    • 表名设置

      • 注册在后台的表名为verbose_name(数据只有一条,即单数),否则为verbose_name_plural(数据大于一条,即为复数),若为指明verbose_name_plural,则复数形式默认在单数形式后面在s(学校s),进入详情页的标签则为models中的verbose_name

      • models中重载__str__()函数返回的值是在每张表详情列表页的展示的标签名,可以在显示列中指定

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        class Grade(models.Model):
        name = models.CharField(max_length=20)
        boyNum = models.IntegerField()
        girlNum = models.IntegerField()
        isDelete = models.BooleanField(default=False)

        def __str__(self):
        return self.name

        class Meta:
        db_table = "grades"
        verbose_name = '班级'
        verbose_name_plural = verbose_name

        models.py

    • app名称设置

      • 只需修改每个app下的apps.py文件,在config类中加上verbose_name=xxx,然后在对应__init__.py文件中加上default_app_config='对应config路径'

        1
        2
        3
        4
        5
        6
        from django.apps import AppConfig


        class MyappConfig(AppConfig):
        name = 'myApp'
        verbose_name = '学生管理'

        应用目录下的apps.py

        1
        default_app_config = 'myApp.apps.MyappConfig'

        应用目录下的__init__.py

  9. 配置示例

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    import xadmin
    # 引入要管理的模型类
    from myApp.models import Student, Grade
    from xadmin import views


    # Register your models here.
    class StudentAdmin(object):
    # 列表页属性
    list_display = ['pk', 'name', 'age', 'sex', 'grade', 'content', 'isDelete']
    list_filter = ["grade", "age"]
    search_fields = ["name"]
    list_per_page = 10

    # 相应表图标配置
    # https://fontawesome.com/icons
    model_icon = 'fa fa-address-book'
    # 显示详情
    show_detail_fields = ['name']
    # 数据刷新时间
    refresh_times = (3, 5)

    # 执行动作框的位置
    actions_on_top = False
    actions_on_bottom = True


    class GradeAdmin(object):
    list_display = ["pk", "name", "boyNum", "girlNum", "isDelete"]
    list_filter = ["name"]
    search_fields = ["name"]
    list_per_page = 10


    class BaseSetting(object):
    '''
    主题样式多样化
    '''
    enable_themes = True
    use_bootswatch = True


    # 设置全局图标
    # http://v3.bootcss.com/components/
    # http://www.yeahzan.com/fa/facss.html
    class GlobalSetting(object):
    # 页头
    site_title = '学生班级管理系统'
    # 页脚
    site_footer = 'By苏寅'
    # 左侧栏折叠样式
    # menu_style = 'accordion'


    xadmin.site.register(Student, StudentAdmin)
    xadmin.site.register(Grade, GradeAdmin)

    xadmin.site.register(views.BaseAdminView, BaseSetting)
    xadmin.site.register(views.CommAdminView, GlobalSetting)