后台admin应用SimpleUI实战

SimpleUI是什么

SimpleUI官网:https://simpleui.72wo.com/simpleui/

简而言之,就是一个很漂亮的开源的Django后台管理框架。

很多人对Django自带的管理后台admin是又爱又恨,优点是几行代码配置就可以撸出一个功能性强的管理后台,缺点就是不怎么美观,感觉拿不出手。在所有的Django后台美化插件中,SimpleUI处于第一阵营,非常符合国人的审美观。本文将手把手教你如何配置使用Simple UI, 包括自定义菜单和控制面板等高级使用技巧.

SimpleUI安装

第一步 pip安装并加入INSTALLED_APPS

 pip install django-simpleui

修改settings.py, 将simpleui加入到INSTALLED_APPS里去,放在第一行,也就是django自带admin的前面。

 INSTALLED_APPS = [ 

   'simpleui', # 注意这里
  'django.contrib.admin',   'django.contrib.auth',   'django.contrib.contenttypes',   'django.contrib.sessions',   'django.contrib.messages',   'django.contrib.staticfiles', ]

 

第二步 测试是否安装成功

使用python manage.py runserver命令启动本地测试服务器, 访问/admin/, 如果你能看到如下页面说明安装成功。

注册用户登录查看

数据库迁移

python38 manage.py makemigrations
python38 manage.py migrate

注册超级管理员

python manage.py createsuperuser

登陆验证

登录后你还将看到如下用户界面:

注意:如果你在生成环境中使用SimpleUI,还需要使用python manage.py collectstatic命令收集静态文件,否则样式无法正常显示。

常用配置

设置语言

当你看到以上界面时,首先你想改动的一定是语言,去掉SimpleUI的默认logo,并把Django administration改成比如某某管理后台的名字。

修改settings.py, 添加如下代码:

 # 更改默认语言为中文
LANGUAGE_CODE = 'zh-hans'

 # 更改时区为上海
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False

更换后台登陆logo

在setting.py中:

 # 换成自己Logo链接
SIMPLEUI_LOGO = '/static/image/star.png'

更改管理后台名字

在应用目录下的admin.py文件, 添加如下代码。这个设置属于Django的设置,不属于SimpleUI的设置。

from django.contrib import admin

admin.site.site_header = 'XXX后台管理'  # 设置header
admin.site.site_title = 'XXX管理后台'   # 设置title
admin.site.index_title = 'XXX管理后台'

屏蔽右侧广告

在setting.py中:

# 隐藏右侧SimpleUI广告链接和使用分析
SIMPLEUI_HOME_INFO = False
SIMPLEUI_ANALYSIS = False

修改之后:

admin后台数据管理

数据准备

  • models.py中创建表模型
from django.db import models

# Create your models here.
class Book(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    publish_date = models.DateField()

    publish = models.ForeignKey(to='Publish',to_field='nid',on_delete=models.CASCADE)
    authors=models.ManyToManyField(to='Author')
    def __str__(self):
        return self.name


class Author(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    author_detail = models.OneToOneField(to='AuthorDetail',to_field='nid',unique=True,on_delete=models.CASCADE)
    def __str__(self):
        return self.name


class AuthorDetail(models.Model):
    nid = models.AutoField(primary_key=True)
    telephone = models.BigIntegerField()
    birthday = models.DateField()
    addr = models.CharField(max_length=64)

    def __str__(self):
        return self.addr


class Publish(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=32)
    email = models.EmailField()

    def __str__(self):
        return self.name

再次执行数据库迁移。

  • admin.py中进行注册
from django.contrib import admin

from .models import Book,Publish,Author,AuthorDetail

admin.site.register(Book)
admin.site.register(Publish)
admin.site.register(Author)
admin.site.register(AuthorDetail)

 

登录后的效果如下所示:

现在你可以看到语言、logo和管理后台名字都已经改过来了。但是你会发现项目名和表名显示的依然是英文,我们需要将其设置成中文。我们接下来要解决这个问题。

自定义或第三方APP名和模型名修改成中文

通过verbose_name可以将app名改为中文。

apps.py中修改项目名

from django.apps import AppConfig


class App01Config(AppConfig):
    name = 'app01'
    verbose_name = '图书管理系统'

models.py中表模型中添加Meta元标签:

    class Meta:
        verbose_name = '作者'
        verbose_name_plural = verbose_name

 

 界面展示

 

在后台管理中添加数据,以作者表为例

保存之后查看,发现只显示作者名字,如何让其他字段也显示在页面上呢?

admin.py中注册类中通过list_play设置要展示的字段

from django.contrib import admin

from .models import Book,Publish,Author,AuthorDetail

admin.site.register(Book)
admin.site.register(Publish)
# admin.site.register(Author)
# admin.site.register(AuthorDetail)    # 不能重复注册



@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    list_display = ['nid','name','age','author_detail']


@admin.register(AuthorDetail)
class AuthorDetailAdmin(admin.ModelAdmin):
    list_display = ['nid', 'telephone', 'birthday', 'addr']

此时刷新后台,会发现,数据已加载。

 

实际Django开发中,我们还会用到第三方应用app和第三方app提供的模型,我们也可以通过打补丁的方式更改第三方app或模型以及模型字段的verbose_name或者label,将其修改成中文,如下所示:

from third_package.models import ModelA
ModelA._meta.verbose_name = ''
ModelA._meta.verbose_name_plural = ''
ModelA._meta.get_field('first_name').verbose_name = '名字'

自定义按钮

后台管理中有默认的按键可以对数据进行增删改查,我们也可以自定义按钮

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    list_display = ['nid','name','age','author_detail']
    actions = ['custom_button']

    def custom_button(self, request, queryset):
        print(queryset)

    custom_button.confirm = '你是否执意要点击这个按钮?'
    custom_button.short_description = '测试按钮'
    custom_button.type = 'danger'

 

 其他配置项

设置默认主题

SimpleUI默认主题(default)是深蓝色的,它支持的主题有Element-ui, Admin LteLayui等多种风格。你可以通过右上角下拉菜单改变主题,也可以在settings.py中设置默认主题,如下所示:


 # 设置默认主题,指向主题css文件名。Admin Lte风格
SIMPLEUI_DEFAULT_THEME = 'admin.lte.css'

# 设置默认主题,指向主题css文件名。Element-ui风格
 SIMPLEUI_DEFAULT_THEME = 'element.css'

# 设置默认主题,指向主题css文件名。layui风格
 SIMPLEUI_DEFAULT_THEME = 'layui.css'

# 设置默认主题,指向主题css文件名。紫色风格
 SIMPLEUI_DEFAULT_THEME = 'purple.css'

 自定义菜单

左侧可折叠菜单是Simple UI系统默认菜单,根据已注册的应用和模型自动生成,其中父级菜单是App名,子菜单一般是所属App的各个模型名。SimpleUI甚至会自动为你分配默认图标,比如本例的tasks的应用使用了font-awsome的fa fa-tasks。在大多数情况下,Simple UI系统默认菜单不能满足需求,这时你就需要自定义菜单了,比如添加新的选项或给菜单选项分配新的图标。

修改settings.py, 添加如下代码:

SIMPLEUI_CONFIG = {
    'system_keep': False,
    'menu_display': ['图书管理', '权限认证', '外部链接'],  # 开启排序和过滤功能, 不填此字段为默认排序和全部显示, 空列表[] 为全部不显示.
    'dynamic': True,  # 设置是否开启动态菜单, 默认为False. 如果开启, 则会在每次用户登陆时动态展示菜单内容
    'menus': [
        {
            'name': '图书管理',
            'app': 'app01',
            'icon': 'fas fa-code',
            'models': [
                {
                    'name': '图书',
                    'icon': 'fa fa-user',
                    'url': 'app01/book/'
                },
                {
                    'name': '出版社',
                    'icon': 'fa fa-user',
                    'url': 'app01/publisssh/'
                },
                {
                    'name': '作者',
                    'icon': 'fa fa-user',
                    'url': 'app01/author/'
                },
                {
                    'name': '作者详情',
                    'icon': 'fa fa-user',
                    'url': 'app01/authordetail/'
                },
            ]
        },
        {
            '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/'
                },
            ]
        },
        {

            'name': '外部链接',
            'icon': 'fa fa-file',
            'models': [
                {
                    'name': 'Baidu',
                    'icon': 'far fa-surprise',
                    # 第三级菜单 ,
                    'models': [
                        {
                            'name': '爱奇艺',
                            'url': 'https://www.iqiyi.com/dianshiju/'
                            # 第四级就不支持了,element只支持了3级
                        }, {
                            'name': '百度问答',
                            'icon': 'far fa-surprise',
                            'url': 'https://zhidao.baidu.com/'
                        }
                    ]
                },
                {
                    'name': '大屏展示',
                    'url': '/show/',
                    'icon': 'fab fa-github'
                }]
        }
    ]
}
  • menu_display对应menus name
  • 如果是项目的app,就menus写app
  • 菜单可以多级,一般咱们内部app,都是一级
  • 可以增加除咱们app外的其它链接---》如果是外部链接,直接写地址,如果是内部链接,跟之前前后端混合项目一样的写法

 

自定义菜单效果如下所示。我们更改了SimpleUI默认分配的图标。你还可以随意增减菜单选项并对其进行排序:

我们可以自己编写前端页面,在menus进行进行配置

 

 

自定义首页

SimpleUI默认首页由快捷链接和最近动作组成,我们可以将其隐藏,并将其链接到其它url。

继续修改settings.py, 添加如下代码:

# 隐藏首页的快捷操作和最近动作
SIMPLEUI_HOME_QUICK = False
SIMPLEUI_HOME_ACTION = False

# 修改左侧菜单首页设置
SIMPLEUI_HOME_PAGE = 'https://cnblogs.com'  # 指向页面
SIMPLEUI_HOME_TITLE = '博客园欢迎你!'  # 首页标题
SIMPLEUI_HOME_ICON = 'fa fa-code'  # 首页图标

# 设置右上角Home图标跳转链接,会以另外一个窗口打开
SIMPLEUI_INDEX = 'https://cnblogs.com'

 

展示效果将如下所示:

更多操作参考教程: https://simpleui.72wo.com/docs/simpleui/

posted @ 2023-02-10 21:25  莫~慌  阅读(2030)  评论(0编辑  收藏  举报