django admin 后台管理展示配置

展示数据库字段名称

 

 

定义数据库表models.py

定义数据库表 文件 modules.py
verbose_name : 数据库数据的字段中文配置
# 告警通知地址
class Webhook(models.Model):
    name = models.CharField('名称', max_length=32)  # verbose_name表示admin管理时显示的中文
    webhook_type_select = (
        (0, '飞书'),
        (1, '企微'),
    )

    webhook_type = models.IntegerField(choices=webhook_type_select, verbose_name="地址类型", default=0)
    url = models.CharField(max_length=256, verbose_name='http/https地址')  # verbose_name表示admin管理时显示的中文
    # title = "名称"
    #
    # def __unicode__(self):
    #     return self.title


    # admin后台项目中文显示设置
    class Meta:
        verbose_name = "告警地址"
        verbose_name_plural = "告警地址"
class_Meta:  verbose_name 表名的中文配置
class Meta:
        verbose_name = "告警地址"
        verbose_name_plural = "告警地址"

 admin 配置文件配置展示字段admin.py

from django.contrib import admin

# Register your models here.

from monitor01 import models


# admin 后台管理设置的展示列
class WebhookDisplay(admin.ModelAdmin):
    list_display = ('name', 'webhook_type', 'url')  # admin后台展示的字段设置,配合admin.py
    search_fields = ('name',)  # 配置搜索框

admin.site.register(models.Rule)
admin.site.register(models.Resource)
admin.site.register(models.Webhook, WebhookDisplay)
admin.site.register(models.AlarmList)

设置App(应用)为中文

 

 

在apps.py 重写admin 管理首页类配置

from django.apps import AppConfig

# # 取消默认的admin 管理首页配置
# class Monitor01Config(AppConfig):
#     default_auto_field = 'django.db.models.BigAutoField'
#     name = 'monitor01'
#     verbose_name = '客户资源报警配置'


# 重写类IndexConfig,然后再在app的__init__.py 进行配置
class AppAdminConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'monitor01'
    verbose_name = '大客户资源报警配置'       #这个就是汉化后的名称。

再在app的__init__.py 应用配置

# default_app_config的值来自apps.py的类名
default_app_config = 'monitor01.apps.AppAdminConfig'

一对一字段展示

通过admin.py 新建一个admin后台展示的类,继承admin.ModelAdmin; 属性list_display=('xxx',)定义展示的列,search_fields = ('xxx',)定义可搜索的列

外键字段通过定义函数来获取需要展示关了外表的字段

 

 

例: admin.py 自定义 AlarmListDisplay类; 类方法get_instance_name(self, obj): 获取展示字段值, list_display 填写函数名字符串,进行展示

列头名称配置:自定义类属性为  方法名.short_description = "列头名称"

# admin后台管理,报警规则展示字段
class AlarmListDisplay(admin.ModelAdmin):
    # admin后台展示字段
    list_display = ('alarm_time', 'get_instance_name', 'alarm_rule_id', 'alarm_value', 'now_status', 'recover_time', 'hold_minutes', )
    # admin后台可搜索字段
    search_fields = ('alarm_time', 'get_instance_name', 'get_rule_name', 'alarm_value', 'now_status', 'recover_time', 'hold_minutes', )

    # 展示一对一外键关联的资源
    def get_instance_name(self, obj):
        return obj.alarm_resource.name + '|' + obj.alarm_resource.instance_id
    # 展示资源的表头命名
    get_instance_name.short_description = '报警资源名|ID'

    # 展示一对一外键关联的规则名称
    def get_rule_name(self, obj):
        return obj.alarm_resource.name
    # 展示报警规则字段的表头命名
    get_rule_name.short_description = '报警规则名称'

 

多对多字段展示(大体同上)

区别在于类方法获取关联字段 obj.关联字段名.all() 获取所有的关联资源

# 展示多对多的字段
    def get_webhook_name(self,obj):
        webhook_list = []
        for w in obj.webhooks.all():  # obj.关联字段名.all() 获取所有的关联资源
            webhook_list.append(w.name)
        return ''.join(webhook_list)

 

 

 admin.py 

参考地址:https://h4ck.org.cn/2019/12/django-admin-foreignkey-manytomanykey-list_display%E5%B1%95%E7%A4%BA/

# admin后台管理,报警规则展示字段
class RuleDisplay(admin.ModelAdmin):
    list_display = ('alarm_name', 'namespace', 'metric_name','warning_type','upper_limit', 'lower_limit', 'period','get_webhook_name')  # admin后台展示的字段设置,配合admin.py
    search_fields = ('alarm_name',)
    # 展示多对多的字段
    def get_webhook_name(self,obj):
        webhook_list = []
        for w in obj.webhooks.all():
            webhook_list.append(w.name)
        return ''.join(webhook_list)
    get_webhook_name.short_description = '通知地址'

优化多对多数据选择框admin.py 配置filter_horizontal

appxxx/admin.py

from django.contrib import admin

# Register your models here.
from monitor01 import models


# admin 后台管理设置的展示列
class WebhookDisplay(admin.ModelAdmin):
    list_display = ('name', 'webhook_type', 'url')  # admin后台展示的字段设置,配合admin.py
    search_fields = ('name',)


# admin后台管理,报警规则展示字段
class RuleDisplay(admin.ModelAdmin):
    list_display = ('alarm_name', 'namespace', 'metric_name', 'warning_type','upper_limit', 'lower_limit', 'period','alarm_interval', 'max_alarm_times', 'get_instance_name', 'get_webhook_name')  # admin后台展示的字段设置,配合admin.py
    search_fields = ('alarm_name',)
    # 展示多对多的字段(关联的报警警通知地址)
    def get_webhook_name(self,obj):
        webhook_list = []
        for w in obj.webhooks.all():
            webhook_list.append(w.name)
        return ''.join(webhook_list)
    get_webhook_name.short_description = '通知地址'

    # 展示多对多关联的资源
    def get_instance_name(self,obj):
        instance_list = []
        for i in obj.instances.all():
            instance_list.append(i.name)

        return '\r\n;'.join(instance_list)
    get_instance_name.short_description = '----绑定实例名列表----'
    filter_horizontal = ('instances', 'webhooks')  # 设置在admin后台新建或修改数据的 多对多字段跨左右窗口配置对应关系。
    # filter_vertical = ('instances',)  # 设置在admin后台新建或修改数据的 多对多字段跨上下窗口配置对应关系。
    # autocomplete_fields = ('instances','webhooks')
    # list_select_related=True


# admin后台管理,报警规则展示字段
class ResourceDisplay(admin.ModelAdmin):
    list_display = ('namespace', 'uid', 'name', 'instance_id')
    search_fields = ('namespace', 'uid', 'name', 'instance_id',)


# admin.register(models.Rule)
# admin.register(models.Resource)
# admin.register(models.Webhook)
# admin.register(models.AlarmList)
admin.site.register(models.Rule, RuleDisplay)

 

appxxx/models.py

# Rule 报警规则
class Rule(models.Model):
    ctime = models.DateTimeField(auto_now_add=True, null=True)
    namespace = models.CharField(max_length=32, verbose_name='资源类型(Namespace)', )   # verbose_name表示admin管理时显示的中文
    alarm_name = models.CharField(max_length=32, verbose_name='报警名称',)              # verbose_name表示admin管理时显示的中文
    metric_name = models.CharField(max_length=32, verbose_name='MetricName', )         # verbose_name表示admin管理时显示的中文
    instances = models.ManyToManyField('Resource',  verbose_name="实例列表", blank=True, null=True)

 

 admin 后台站点名称配置

  • admin.site.site_header 设置网站页头

  • admin.site.site_title 设置页面标题

  • admin.site.index_title 设置首页标语

调整前

 

 

根/目录跳转到 admin 默认首页配置

配置urls.py

from django.contrib import admin
from django.urls import path
from django.urls import re_path as url
# from app01 import views
from monitor01 import views
from django.views.generic.base import RedirectView

admin.site.site_header = '售后监制资源报警规则配置系统'
admin.site.site_title = '金山售后监控系统'
admin.site.index_title = '欢迎大家积极配置使用'
urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^favicon\.ico', RedirectView.as_view(url=r'/static/favicon.ico')),
    url('^$', views.gotoAdmin),   # 默认站点配置

admin 菜单栏折叠优化 simpleui

https://simpleui.72wo.com/docs/simpleui/QUICK.html#%E9%93%BE%E6%8E%A5%E6%8C%89%E9%92%AE

 

安装:

pip install --index-url https://mirrors.aliyun.com/pypi/simple/ django-simpleui

使用:

 settings.py 加载simpleui

INSTALLED_APPS = [
    'simpleui',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 'app01',
    'monitor01',

]

配置:

settings.py  配置 SIMPLEUI_CONFIG 环境变量

'system_keep': False,  # 关闭系统菜单
 'menu_display': ['公网拨测监控', '金山云资源监控','报警地址','报警历史', '割接/变更 公告推送', '认证和授权'],  设置一级菜单
'menus': 设置菜单子项
 
SIMPLEUI_CONFIG = {
    'system_keep': False,  # 关闭系统菜单
    'menu_display': ['公网拨测监控', '金山云资源监控','报警地址','报警历史', '割接/变更 公告推送', '认证和授权'],
    'dynamic': True,    # 设置是否开启动态菜单, 默认为False. 如果开启, 则会在每次用户登陆时动态展示菜单内容
    'menus': [{
        # 公网拨测一级菜单
        'app': 'monitor01',
        'name': '公网拨测监控',
        'icon': 'fab fa-app-store-ios',
        'models': [{
            'name': 'HTTP探测',
            'icon': 'fa fa-user',
            'url': 'monitor01/httptestrule/'
        }, {
            'name': 'Ping报警规则(ICMP)',
            'icon': 'el-icon-video-camera-solid',
            'url': 'monitor01/ippinglossrule/',
        },{
            'name': 'IP地址列表',
            'icon': 'el-icon-video-camera-solid',
            'url': 'monitor01/ipresource/',
        }]},
        #  金山云资源监控  一级菜单
        {
        'app': 'monitor01',
        'name': '金山云资源监控',
        'icon': 'fa fa-th-list',
        'models': [{
            'name': '报警规则',
            'icon': 'el-icon-message-solid',
            'url': 'monitor01/rule/'
        }, {
            'name': '资源列表',
            'icon': 'el-icon-picture',
            'url': 'monitor01/resource/'
        }
        ]},
        {
        'app': 'monitor01',
        'name': '报警地址',
        'icon': 'fa fa-th-list',
        'models': [{
            'name': '飞书企微机器人',
            'icon': 'el-icon-message-solid',
            'url': 'monitor01/webhook/'
        }
        ]},
        #  报警历史  一级菜单
        {
        'app': 'monitor01',
        'name': '报警历史',
        'icon': 'fa fa-th-list',
        'models': [{
            'name': '金山云资源报警历史',
            'icon': 'el-icon-message-solid',
            'url': 'monitor01/alarmlist/'
        }, {
            'name': 'IP Ping丢包报警历史',
            'icon': 'el-icon-picture',
            'url': 'monitor01/ippinglossalarmlist/'
        }]},
        # 变更通报  一级菜单
        {
        'app': 'monitor01',
        'name': '割接/变更 公告推送',
        'icon': 'fa fa-th-list',
        'models': [{
            'name': '公告列表(开发中,敬请期待)',
            'icon': 'el-icon-message-solid',
            'url': ''
        }]},
        # 用户管理 一级菜单
        {
        'app': 'auth',
        'name': '认证和授权',
        'icon': 'fas fa-shield-alt',
        'models': [{
            'name': '用户',
            'icon': 'far fa-user',
            'url': 'auth/user/'
        }, {
           'name': '',
           'icon': 'fas fa-users-cog',
            'url': 'auth/group/',
        }]
    }]
}

 

posted on 2023-02-04 22:26  zhangmingda  阅读(577)  评论(0编辑  收藏  举报

导航