【Django5】内置Admin系统

系列文章目录

第十四章 内置Admin系统



前言

Admin后台系统也成为网站后台管理系统,主要对网站的信息进行管理,如文字、图片、影音和其他日常使用的文件的发布、更新、删除等操作,也包括功能信息的统计和管理,如用户信息、订单信息和访客信息等。简单来说,它是对网站数据库和文件进行快速操作和管理的系统,以使网页内容能够及时得到更新和调整。


内置管理系统初体验

当一个网站上线之后,网站管理员通过网站后台系统对网站进行管理和维护。

Django 已内置Admin后台系统,在创建Django项目的时候,可以从配置文件settings.py中看到项目已默认启用Admin后台系统。

在这里插入图片描述

urls.py里定义了Admin系统的首页地址:

在这里插入图片描述

我们浏览器输入http://127.0.0.1:8000/admin/即可进入Admin系统首页,默认跳转到Admin系统登录页面。
在这里插入图片描述

我们发现是英文,我们一般开发交付给客户,必须是本地化中文。我们可以加一个中文本地化的中间件即可实现;

settings.py里加下:

# 使用中文
'django.middleware.locale.LocaleMiddleware',

在这里插入图片描述
注意下有顺序要求。

Admin系统用户,权限,认证相关的表有如下6个,其中auth_user是用来存后台管理员信息,默认里面是没有数据的。
在这里插入图片描述

我们可以通过python内置的manage.py的createsuperuser命令来创建超级管理员的账号和密码。
输入 createsuperuser命令,提示让我们输入用户名,再输入邮箱,以及密码和确认密码,最终我们可以强制输入y,确认。

在这里插入图片描述
这样auth_user数据库表有就有管理员数据了。

我们回到Admin登录页面,输入刚才创建的用户名和密码:
在这里插入图片描述

点击登录按钮,则进入系统管理主页;

在这里插入图片描述

在Admin后台系统中可以看到,网页布局分为站点管理、认证和授权、用户和组,分别说明如下: (1)站点管理是整个Admin后台的主体页面,整个项目的App所定义的模型都会在此页面显示。 (2)认证和授权是Django内置的用户认证系统,包括用户信息、权限管理和用户组设置等功能。 (3)用户和组是认证和授权所定义的模型,分别对应数据表auth_user和 auth_user_groups。
在这里插入图片描述

注册模型到Admin系统

我们开发业务系统的时候,会定义很多的业务模型,我们可以把模型注册到Admin系统,让Admin系统帮我们维护这些模型。也就是在Admin后台自动给模型实现增删改查功能。

注册模型到Admin系统有两个方式,我们都来演示下:

方式一,直接将模型注册到admin后台,以BookTypeInfo模型为例

打开admin.py

from django.contrib import admin

from helloWorld.models import BookTypeInfo

# Register your models here.
# 方法一,将模型直接注册到admin后台
admin.site.register(BookTypeInfo)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方式二:自定义类,继承ModelAdmin,以BookInfo为例

@admin.register(BookInfo)
class BookInfoAdmin(admin.ModelAdmin):
    # 设置显示字段
    list_display = ('id', 'bookName', 'price', 'publishDate', 'bookType')

我们可以点进ModelAdmin类里看下,我们可以对模型的增删改查操作做精细化的配置,包括显示字段,分页,可编辑字段,查询字段,排序等。

在这里插入图片描述
Admin后台就多了图书信息

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我们同样可以对图书信息做增删改查操作;

再加亿点点功能:

class BookInfoAdmin(admin.ModelAdmin):
    # 设置显示字段
    list_display = ['id', 'bookName', 'price', 'publishDate', 'bookType']
    search_fields = ['bookName', 'price']
    list_filter = ('bookType', 'publishDate')
    list_per_page = 10
    list_editable = ('bookName', 'price', 'publishDate', 'bookType')
    fieldsets = (
        ('基本信息', {'fields': ('bookName', 'price', 'publishDate')}),
        ('高级信息', {'fields': ('bookType',)}),
    )

在这里插入图片描述
在这里插入图片描述

具体设置可以看Django定制Admin页面详细实例(展示页面和编辑页面)

内置Admin系统自定义设置

更改app模块名、title、header、index。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

内置Admin系统二次开发

前面我们体验了Admin系统,以及模型注册,自定义设置。但是依然满足不了我们实际的业务开发需求。接下来,我们来讲下更细致的Admin系统二次开发。

创建一个普通管理员账户
首先我们在Admin后台系统里新建一个普通管理员账号。

认证和授权的用户右侧点击“新增”
在这里插入图片描述

勾选“职员状态”
在这里插入图片描述

这样我们就可以用ikun这个用户登录系统了。在这里插入图片描述
设置不可编辑字段 get_readonly_fields()
业务开发时,有时候一些敏感字段,我们不允许普通管理员修改。我们可以通过重写ModelAdmin的get_readonly_fields()方法实现;

    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            return []
        else:
            return [ 'price', 'bookType']

在这里插入图片描述
可以看到这里只有价格和种类能修改了。

这里我们同时也发现,字段label名称是英文BookName,原因是我们没有设置属性字段的verbose_name

我们可以在models.py里,加下verbose_name配置即可;
在这里插入图片描述
在这里插入图片描述
可以看到字段都变为中文名称了。

当然还有很多细粒度设置的方法,如下

formfield_for_foreignkey() 设置外键下拉框过滤筛选

formfield_for_foreignkey() 重写外键下拉框数据,比如增加下拉选项。

save_model() 添加或者修改处理逻辑重写 ,可以增加一些日志等处理。

等等…

自定义Admin模版

Admin后台管理系统的模版文件和Django框架内置提供的,我们可以在源码里找到。

具体位置在django -> contrib -> admin -> templates 下
在这里插入图片描述
很多时候我们需要修改默认的模版,包括程序功能,样式等,来达到业务需求。

我们可以直接修改源码里的模版,但是这种方式不好,如果一台机器有多个项目,会影响其他项目使用。

我们提倡在项目的模块项目的templates下,通过优先级来实现修改模版。

具体方式如下:

模块项目(比如我们这是helloWorld项目)的templates下,新建admin目录,然后admin目录下创建你需要覆盖的模版名称。

比如我们覆盖下修改的模版change_form.html
在这里插入图片描述

总结

本章学习了内置的Admin系统的用法,总的来说比自己手写要快要方便很多。

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值