django excel 导出页面_Admin和Xadmin后台管理页面

内容大纲

  • Admin后台管理
  • Xadmin后台管理
知乎视频​www.zhihu.com

Admin

django内置了一个强大的组件叫Admin,提供给网站管理员快速开发运营后台的管理站点。

站点文档: https://docs.djangoproject.com/zh-hans/2.2/ref/contrib/admin/

辅助文档:https://www.runoob.com/django/django-admin-manage-tool.html

注意:要使用Admin,必须先创建超级管理员.   python manage.py createsuperuser

访问地址:http://127.0.0.1:8000/admin,

admin站点默认并没有提供其他的操作给我们,所以一切功能都需要我们进行配置,在项目中,我们每次创建子应用的时候都会存在一个admin.py文件,这个文件就是用于配置admin站点功能的文件。

admin.py里面允许我们编写的代码一共可以分成2部分:

列表页配置

主要用于针对项目中各个子应用里面的models.py里面的模型,根据这些模型自动生成后台运营站点的管理功能。

详情页完整配置

from django.contrib import admin  # 导入admin父类  模型管理器
from .models import Student  # 导入模型类(给那个模型加后台管理)


class StudentModelAdmin(admin.ModelAdmin):
    """学生模型管理器"""
    # date_hierarchy = 'born'  # 按指定时间字段的不同值来进行选项排列,字段值必须为时间格式

    # 要显示在admin页面的字段
    list_display = ['id', 'name', 'sex', 'classmeta', 'class2', 'description']
    '''classmeta的显示效果不如class2的显示效果'''

    ordering = ['-id']  # 设置默认排序字段,字段前面加上-号表示倒叙排列

    list_filter = ["class_num"]  # 过滤器
    search_fields = ["name"]  # 搜索内容,会有一个搜索框 搜指定的字段,name

    # 自定义模型管理器,不是模型的字段
    def class2(self, obj):
        return obj.class_num + '班'

    class2.short_description = '班级'  # 自定义字段描述信息

    class2.admin_order_field = 'class_num'  # 可以设置一个自定义字段为用户提供点击就按照字段来排序的功能

    # actions_on_bottom = False  # 下方控制栏是否显示,默认False表示隐藏
    # actions_on_top = False  # 上方控制栏是否显示,默认True表示隐藏

    readonly_fields = ['name']  # 只读,不能修改,admin显示也会不能选中

    # 字段集,fieldsets和fields只能使用其中之一
    fieldsets = (
        ("基本资料", {
            'fields': ('name', 'age', 'sex')
        }),
        ('详细资料', {
            'classes': ('collapse',),  # 折叠样式,在其他的选项里面也可以填写
            'fields': ('class_num', ),
        }),
        ('详细资料', {
            'classes': ('collapse',),  # 折叠样式,在其他的选项里面也可以填写
            'fields': ('description', ),
        }),
    )
    '''元祖里面第一个是自定义菜单名称,不限数量的写'''

    def delete_model(self, request, obj):
        '''
        删除数据的钩子:删除数据的时候触发
        中间可以进行权限,或者日志等其他相关操作
        eg:在后台删除一些会员用户,多条数据联动,需要写日志
        '''

        # 除了root用户,其他用户删除数据的时候,都会报错
        if request.user.username != "root":
            raise Exception('你没有权限删除这个数据')

        return super().delete_model(request, obj)

    def save_model(self, request, obj, form, change):
        '''
        保存数据的钩子[会在添加/修改模型数据的时候出发]
        :param request:
        :param obj: 本次操作的模型,有id就表示修改
        :param form: 表单,用户提交过来的数据
        :param change: 修改后的数据
        :return:
        '''
        if obj.id:
            print('有人修改了数据')  # 修改数据会打印
        else:
            print('有人添加了数据')  # 添加数据会打印


# 最后输出出去
# admin.site.register(模型类, 模型管理类)
admin.site.register(Student, StudentModelAdmin)

折叠效果演示

0932fe1d0f46053f16d20c134815c980.gif

Xadmin

xadmin是Django的第三方扩展,是一个比Django的admin站点使用更方便的后台站点。构建于admin站点之上。

文档:http://sshwsfc.github.io/xadmin/

​ https://xadmin.readthedocs.io/en/latest/index.html

1.1. 安装

通过如下命令安装xadmin的最新版

pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2

在配置文件settings.py中注册如下应用

# (主包, 表单包, 操作记录系统)
INSTALLED_APPS = [
    ...
    'xadmin',  # 主包
    'crispy_forms',  # 表单包
    'reversion',  # 操作记录系统
    ...
]

# 修改使用中文界面
LANGUAGE_CODE = 'zh-Hans'

# 修改时区
TIME_ZONE = 'Asia/Shanghai'

xadmin有建立自己的数据库模型类,需要进行数据库迁移

python manage.py makemigrations
python manage.py migrate

在总路由urls.py中添加xadmin的路由信息

import xadmin
xadmin.autodiscover()

# version模块自动注册需要版本控制的 Model
from xadmin.plugins import xversion
xversion.register_models()

urlpatterns = [
    path('xadmin/', xadmin.site.urls),
]

完整urls.py

from django.contrib import admin
from django.urls import path, include

# xadmin的路由注册
import xadmin 
xadmin.autodiscover()

# version模块自动注册需要版本控制的 Model
from xadmin.plugins import xversion  # 自动注册
xversion.register_models()  # 版本控制

urlpatterns = [
    path('admin/', admin.site.urls),
    path('xadmin/', xadmin.site.urls),
    path('students/', include("students.urls")),
]

创建超级用户

python manage.py createsuperuser
写password的时候,是没有显示的

1.2. 使用

  • xadmin不再使用Django的admin.py进行功能配置了,而是需要编写代码在子应用的adminx.py文件中。
  • xadmin的站点管理类不用继承admin.ModelAdmin,而是直接继承object即可。

例如:在子应用students中创建adminx.py文件。

1.2.1 站点的全局配置

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 = "绝活小队有限公司"  # 设置站点的页脚
    menu_style = "accordion"  # 设置菜单折叠

xadmin..register(views.CommAdminView, GlobalSettings)

1.2.2 站点Model管理

xadmin可以使用的页面样式控制基本与Django原生的admin一致。

  • list_display 控制列表展示的字段
list_display = ['id', 'title', 'read', 'comment']
  • search_fields 控制可以通过搜索框搜索的字段名称,xadmin使用的是模糊查询
search_fields = ['id','title']
  • list_filter 可以进行过滤操作的列,对于分类、性别、状态
list_filter = ['is_delete']
  • ordering 默认排序的字段
  • readonly_fields 在编辑页面的只读字段
  • exclude 在编辑页面隐藏的字段
  • list_editable 在列表页可以快速直接编辑的字段
  • show_detail_fields 在列表页提供快速显示详情信息
  • refresh_times 指定列表页的定时刷新
refresh_times = [5, 10,30,60]  # 设置允许后端管理人员按多长时间(秒)刷新页面
  • list_export 控制列表页导出数据的可选格式
list_export = ('xls', 'xml', 'json')   list_export设置为None来禁用数据导出功能   
list_export_fields = ('id', 'title', 'pub_date') # 允许导出的字段

c5ae271633eeb01fd97925fcd50f753c.png
  • show_bookmarks 控制是否显示书签功能

show_bookmarks = True

  • data_charts 控制显示图表的样式
data_charts = {
        # "order_amount": {  # 左面这个是别名
        #     'title': '图表的标题',
        #     "x-field": "x轴的字段值",
        #     "y-field": ('y轴的字段值1', 'y轴字段值2'),
        #     "order": ('要排序的字段',)
        # },
        #    支持生成多个不同的图表
           "order_amount": {
             'title': '班级人数',
             "x-field": "class_num",
             "y-field": ('id',),
             "order": ('class_num',)
           },
    }
  • title 控制图标名称
  • x-field 控制x轴字段
  • y-field 控制y轴字段,可以是多个值
  • order 控制默认排序
  • model_icon 控制菜单的图标

这里使用的图标是来自bootstrap3的图标。https://v3.bootcss.com/components/

就是子应用模型表的名字前面的图标

class BookInfoAdmin(object):
    model_icon = 'fa fa-gift'

xadmin.site.register(models.BookInfo, BookInfodmin)

修改admin或者xadmin站点下的子应用成中文内容。

需要去两个文件里面去配置

在子应用的apps.py下面的配置中,新增一个属性verbose_name

from django.apps import AppConfig

class StudentsConfig(AppConfig):
    name = 'students'
    verbose_name = "学生管理"

然后在当前子应用的init.py里面新增一下代码:

default_app_config = "students.apps.StudentsConfig"

1.2.3完整adminx.py

import xadmin  # 拿xadmin
from .models import Student  # 拿模型
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 = "绝活小队有限公司"  # 设置站点的页脚
    menu_style = "accordion"  # 设置菜单折叠


xadmin.site.register(views.CommAdminView, GlobalSettings)


class StudentModelAdmin(object):
    list_display = ['id', 'name', 'age', 'sex', 'class2', 'description']

    """xadmin的基本配置"""
    enable_themes = True  # 开启主题切换功能
    use_bootswatch = True  

    def class2(self, obj):
        return obj.class_num + '班'

    # 下面两条一般一起使用,如果不加第二行,就不可以自动排序
    class2.short_description = '班级'  # 自定义字段描述信息(显示在admin页面的字段名)
    class2.admin_order_field = 'class_num'  # 可以设置一个自定义字段为用户提供点击就按照字段来排序的功能

    search_fields = ['id', 'name']  # 搜索框

    list_filter = ['class_num', 'name']  # 过滤器

    readonly_fields = ['name']  # 只读,不可修改不可选中

    list_editable = ['description']  # 在主页面就可以直接修改,就像是审核后台页面

    # 给那个字段设置,那个字段后面就出现感叹号! 
    # 点一下就会出现所有的信息,放在id或者名字都可以
    show_detail_fields = ['description', 'name']  # 显示详情

    refresh_times = [5, 10, 30, 60]  # 设置允许后端管理人员按多长时间(秒)刷新页面,可点击选择不刷新

    # 从数据库中导出数据,导入到本地
    list_export = ('xls', 'xml', 'json')  # list_export设置为None来禁用数据导出功能
    list_export_fields = ('id', 'title', 'pub_date')  # 允许导出的字段

    data_charts = {
        # "order_amount": {  # 左面这个是别名
        #     'title': '图表的标题',
        #     "x-field": "x轴的字段值",
        #     "y-field": ('y轴的字段值1', 'y轴字段值2'),
        #     "order": ('要排序的字段',)
        # },
        #    支持生成多个不同的图表
           "order_amount": {
             'title': '班级人数',
             "x-field": "class_num",
             "y-field": ('id',),
             "order": ('class_num',)
           },
    }


# xadmin.site.register(模型, 模型管理类)
xadmin.site.register(Student, StudentModelAdmin)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值