Django Web开发入门——Admin后台


上文中,我们说Django自带了一个强大的后台管理系统,那么强大在何处呢?本文来学习Django后台的强大之处。

一、使用simpleui优化django后台页面

前文中见到的Django原生后台巨丑无比,好在现在网上有很多好看的后台管理系统框架,simpleui就是一款完美兼容原生Django后台的Admin管理系统,基本支持所有原生Admin的定制功能,并且有加强。

安装django-simpleui

pip install django-simpleui

在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',
      ...
  ]

再次访问django后台,已经变成simpleui的界面

1589899801411

二、自定义Admin后台界面

上文中,我们已经简单实现了web开发的MVC过程,但是由于我们没有考虑html页面的美观问题,因此网页及其丑陋。我们本次要开发的功能全部是需要放在后台管理系统simple里面的,那么如何在simple里面增加自定义的页面呢?下文将按simpleui官方文档的顺序,讲述simpleui的二次开发。

在后台显示模块

1、注册APP模型

修改APP/admin.py,增加admin.site.register(models1,models2)来注册models到后台

from django.contrib import admin
from .models import AHistory

admin.site.register(AHistory)

刷新页面,发现APP和模型已显示在后台系统里面:

1587093302450

如此显示的界面有许多瑕疵,例如APP和模型都是中文,列表实现也很奇怪等,通过下面的方法,可以优化。

修改模块名称

修改base/Apps.py:

from django.apps import AppConfig

class BaseConfig(AppConfig):
    name = 'base'
    verbose_name = 'BI导出用户'

修改APP/init.py

from django.apps import AppConfig
import os

default_app_config = 'base.apps.BaseConfig' 
VERBOSE_APP_NAME =u'BI用户导出'

刷新界面,APP名称已变成中文:

1587094477241

修改模型名称、模型字段显示名称

修改APP/models.py:

class AHistory(models.Model):
    id = models.AutoField('ID',db_column='ID', primary_key=True) #第一个参数增加中文名 
    date = models.DateTimeField('导出时间',blank=True, null=True)
    filename = models.CharField('文件名称',max_length=100, blank=True, null=True)
    #显示中文名
    def __str__(self):
        return self.filename


    class Meta:
        managed = False
        db_table = 'a_history'
        verbose_name = '历史导出记录'         #单数页面模型显示中文名
        verbose_name_plural = '历史导出记录'  #复数页面模型显示中文名

刷新页面:

1587094811774

1587094837809

另外也可以使用装饰器来注册models:

from django.contrib import admin
from .models import AHistory
# Register your models here.

@admin.register(AHistory)  #装饰器
class AHistoryAdmin(admin.ModelAdmin):
    pass

2、自定义导航

在项目的settings.py里面增加‘SIMPLEUI_CONFIG’参数可以配置后台管理系统的导航:

SIMPLEUI_CONFIG = {
    'system_keep': True,  #是否保留系统原有菜单
    #'menu_display': ['Simpleui', '测试', '权限认证', '动态菜单测试'],   # 开启排序和过滤功能, 不填此字段为默认排序和全部显示, 空列表[] 为全部不显示.
    'dynamic': True,    # 设置是否开启动态菜单, 默认为False. 如果开启, 则会在每次用户登陆时动态展示菜单内容
    'menus': [
        {'app':'base',                  #APP名称
        'name': 'BI用户导出',            #显示菜单名称
        #'icon': 'fas fa-code',         #显示菜单图标
        'models':[                      #定义二级菜单
            {
                'name':'历史记录',
                'icon':'fa fa-user',
                'url':'/base/'          #菜单链接地址,内部地址需按urls.py的路由配置填写
            }
        ]
    }, {
        'app': 'auth',
        'name': '权限认证',
        'icon': 'fas fa-user-shield',
        'models': [{
            'name': '用户',
            'icon': 'fa fa-user',
            'url': 'auth/user/'
        },{
            'name': '群组',
            'icon': 'fa fa-user',
            'url': 'auth/group/'
        }]
    }]
}

1587110282264

调整显示界面

调整列表显示字段及过滤相关组件

修改APP/admin.py,定义新的类,并注册,新类里面配置页面显示的控件:

from django.contrib import admin
from .models import AHistory
# Register your models here.

class AHistoryAdmin(admin.ModelAdmin):
    list_display = ('id','date','filename') #设置列表显示字段
    list_per_page = 20 #设置每页显示数量
    #ordering = ('-date') #设置排序字段,‘-’表示降序
    search_fields = ('filename','date',) #设置列表上方搜索组件
    date_hierarchy = ('date') #时间点击过滤栏
    list_filter = ('filename','date') #过滤器
    fields = ('date','filename')#设置表单显示字段

admin.site.register(AHistory,AHistoryAdmin)

1587095353682

隐藏默认的新增、删除、修改相关按钮
from django.contrib import admin
from .models import AHistory
# Register your models here.

@admin.register(AHistory)
class AHistoryAdmin(admin.ModelAdmin):
    list_display = ('id','date','filename') #设置列表显示字段
    list_per_page = 20 #设置每页显示数量
    #ordering = ('-date') #设置排序字段,‘-’表示降序
    search_fields = ('filename','date',) #设置列表上方搜索组件
    date_hierarchy = ('date') #时间点击过滤栏
    list_filter = ('filename','date') #过滤器
    fields = ('date','filename')#设置表单显示字段

   #开启或关闭新增按钮的函数
    def has_add_permission(self,request,obj = None):
        return False

    #开启或关闭删除按钮的函数   
    def has_delete_permission(self,request,obj = None):
        return False

    #开启或关闭详情页面修改的函数 
    def has_change_permission(self,request,obj = None):
        return False
添加自定义按钮

在APP/admin.py里面模型对应的类里面增加函数和配置,具体如下:

    #定义按钮和点击时执行的动作,本案例为执行导数脚本和插入数据库记录
    def custom_button(self,request,queryset):
        #插入数据
        obj = AHistory(date='2020-04-19',filename = 'HHH')
        obj.save()

    #增加按钮
    actions=[custom_button]
    #点击按钮弹出确认提示
    custom_button.confirm = '是否确定导出?'
    #按钮显示名称
    custom_button.short_description = '导出BI用户'
    #icon,设置按钮图标参考element-ui icon与https://fontawesome.com
    custom_button.icon = 'fas fa-audio-description'
    # 指定element-ui的按钮类型,参考https://element.eleme.cn/#/zh-CN/component/button
    custom_button.type = 'primary'
    # 给按钮追加自定义的颜色
    custom_button.style = 'color:white;'

    # 链接按钮,设置之后直接访问该链接
    # 3中打开方式
    # action_type 0=当前页内打开,1=新tab打开,2=浏览器tab打开
    # 设置了action_type,不设置url,页面内将报错
    # 设置成链接类型的按钮后,custom_button方法将不会执行。
    #custom_button.action_type = 1
    #custom_button.action_url = 'http://www.baidu.com'

更多自定义admin方法参考这些文章:Django admin 模型选项(ModelAdmin) 【详细】DJANGO ADMIN 一些有用的设置刘江的Django教程-自定制Admin


文章作者: 无咎
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 无咎 !
评论
 上一篇
Scrapy中使用USER_AGENT模拟浏览器请求 Scrapy中使用USER_AGENT模拟浏览器请求
前言在使用爬虫的过程中,经常遇到网站的一些反爬措施。通常Scrapy爬虫的请求头里面的用户代理user agent是固定的一种,很容易被识别出,因此许多网站将过滤指定user agent作为最基础的反爬手段,那么我们要绕开的方法就是每次请求
2020-05-30
下一篇 
Django Web开发入门——MVC框架开发新应用 Django Web开发入门——MVC框架开发新应用
接着上篇启动项目后,开始按Django的MVC框架开发新应用。 创建APP并注册进入刚刚创建的项目目录,使用以下命令创建APP,命名为base: python manage.py startapp base 进入workdesk\setti
2020-05-17
  目录