【Django5】内置Admin系统

news2025/1/10 1:33:20

系列文章目录

第一章 Django使用的基础知识
第二章 setting.py文件的配置
第三章 路由的定义与使用
第四章 视图的定义与使用
第五章 二进制文件下载响应
第六章 Http请求&HttpRequest请求类
第七章 会话管理(Cookies&Session)
第八章 文件上传实现
第九章 多种视图view
第十章 Django5模板引擎
第十一章 模型定义与使用
第十二章 ORM执行SQL语句和事务
第十三章 表单定义与使用
第十四章 内置Admin系统
第十五章 内置Auth认证系统


文章目录

  • 系列文章目录
  • 前言
  • 内置管理系统初体验
  • 注册模型到Admin系统
    • 方式一,直接将模型注册到admin后台,以BookTypeInfo模型为例
    • 方式二:自定义类,继承ModelAdmin,以BookInfo为例
  • 内置Admin系统自定义设置
  • 内置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系统的用法,总的来说比自己手写要快要方便很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python中,jsonpath提取数据的时候出现TypeError: ‘bool‘ object is not subscriptable怎么解决

json格式如下: { success: True, result: { codeInfo: { code: 0, msg: 成功 }, uploadToken: { resId: rzJRpo, endpoint: https://sit-api-ypsx-resource.ypsx-internal.com/r…

知识分享|temu跨境选品师盈利一般要多久?

在成为一名跨境选品师,特别是在TEMU(The Easy Market University)平台上,盈利的速度取决于多种因素,包括个人技能、市场选择、产品定位和运营策略等。这些因素共同决定了一个选品师从初始阶段到稳定盈利的时间轨迹。 首先,对于新手…

vue3组件通信(一)

组件通信 一.props(父<>子)二.自定义事件&#xff08;子>父&#xff09;三.mitt(实现任意组件通信)四.v-model(父<>子)(1).v-model的本质(2).组件标签中v-model的本质(3).$event到底是什么 概况 一.props(父<>子) 使用频率最高 若 父传子&#xff1a;属性…

Redis结合Lua脚本的简单使用

我们就拿购物车举例子 现在有5个东西免费送&#xff0c;我们只能选择1个 例如 可乐 美年达 香蕉 苹果 薯片 我们选择后就放进redis里面 然后我们不能选重复&#xff0c;只能选不同 Lua脚本 我们redis使用lua脚本的时候&#xff0c;会传两个参数进去 一个是List<Strin…

(新)VMware虚拟机安装Linux教程(超详细)

创作不易&#xff0c;禁止转载抄袭&#xff01;&#xff01;&#xff01;违者必究&#xff01;&#xff01;&#xff01; 创作不易&#xff0c;禁止转载抄袭&#xff01;&#xff01;&#xff01;违者必究&#xff01;&#xff01;&#xff01; 创作不易&#xff0c;禁止转载抄…

PMP相关考点整理

PMP知识点整理 一、预测型4. 项目整合管理启动:4.1 制定项目章程规划:4.2 制定项目管理计划执行:4.3 指导与管理项目工作4.4 管理项目知识监控4.5监控项目工作4.6 实施整体变更控制【都是重点】收尾4.7 结束项目或阶段5. 项目范围管理启动:/规划:/5.1 规划范围管理5.2 收集…

36.【C语言】函数栈帧的创建和销毁

本文将解决以下问题 局部变量是怎么创建的&#xff1f; 为什么局部变量的值是随机值&#xff1f; 函数是怎么传参的&#xff1f;传参的顺序是怎样的&#xff1f; 形参和实参是什么关系&#xff1f; 函数调用是怎么做的&#xff1f; 函数调用是结束后怎么返回的&#xff1f; 本文…

电脑部分数据丢失?别担心,这里有恢复指南!

在数字化时代&#xff0c;电脑已成为我们日常生活中不可或缺的设备&#xff0c;存储着大量重要的工作文档、个人照片、视频回忆以及各类学习资料。然而&#xff0c;无论是由于误操作、系统故障、病毒攻击还是硬件损坏&#xff0c;电脑数据丢失的情况时有发生&#xff0c;令人焦…

JAVA(IO流-字节流)day 7.29

ok家人们今天继续学习IO流&#xff0c; 一.字节流 存储时&#xff0c;都是使用二进制来保存。 2.1 字节输出流OutputStream OutputStream是字节输出流的超类&#xff08;父类&#xff09;, 方法 public abstract void write(int b)&#xff1a; 一次写一个字节数据。pub…

如何实现无公网IP远程访问本地内网部署的Proxmox VE虚拟机平台

文章目录 1. 局域网访问PVE2. 安装Cpolar 工具3. 创建PVE公网地址4. 远程访问PVE5. 设置固定域名6. 固定地址访问 Proxmox VE是一个完全开源的平台&#xff0c;基于Debian Linux&#xff0c;用于运行虚拟机和容器。为了提供最大的灵活性&#xff0c;它支持两种虚拟化技术&#…

超简单!证件照换底色一分钟速成技巧

证件照的底色一般情况下分为&#xff1a;蓝色、红色、白色 证件照的尺寸也分为&#xff1a;一寸、两寸、大一寸、小二寸等 不同的文件或需求场景下对于证件照的底色和尺寸都有不同的要求&#xff0c;想要更方便的变更证件照可以先保存一版电子版&#xff0c;然后每次在初始版…

C++使用Boost库对时间的操作

0x00、获取当前时间&#xff0c;时间格式为yyyy-MM-dd hh:mm:ss.zzz std::string GetCurrentTime() {// 使用本地时间boost::posix_time::ptime now boost::posix_time::microsec_clock::local_time();// 获取毫秒部分boost::posix_time::time_duration td now.time_of_day(…

【数据结构】——双链表的实现(赋源码)

双链表的概念和结构 双链表的全称叫做&#xff1a;带头双向循环链表 它的结构示意图如下 注意&#xff1a;这⾥的“带头”跟前⾯我们说的单链表的“头结点”是两个概念&#xff0c;实际前⾯的在单链表阶段称呼不严谨&#xff0c;但是为了读者们更好的理解就直接称为单链表的头…

学习008-02-04-09 Assign a Standard Image(分配标准图像)

Assign a Standard Image&#xff08;分配标准图像&#xff09; This lesson explains how to associate an entity class with a standard image from the DevExpress.Images assembly. This image illustrates the entity class in the following sections of the UI: 本课介…

C# Unity 面向对象补全计划 之 访问修饰符

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列旨在通过补全学习之后&#xff0c;给出任意类图都能实现并做到逻辑上严丝合缝

LabVIEW安装DSC模块 转自三景页593

打开NI Package Manager&#xff0c;找到LabVIEW and Drivers 找到自己需要的版本进行下载 搜索需要的模块进行下载 以DSC模块为例&#xff0c;下载右边的安装即可 最后用激活工具激活即可使用

【AI大模型】:结合wxauto实现智能微信聊天机器人

文章目录 &#x1f9d0;一、wxauto简介&#x1f3af;二、wxauto的主要功能&#x1f4e6;三、wxauto的安装与使用1. wxauto的安装2. wxauto的简单使用3. wxauto的消息对象 &#x1f4bb;四、wxauto结合大模型实现简单的聊天机器人三、完整代码 &#x1f9d0;一、wxauto简介 wxa…

(day28)leecode——有效括号

描述 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()","()(())","…

视频转场SDK,高效集成,提升视频制作效率

传统的视频制作方式往往受限于单一的转场效果&#xff0c;难以在瞬息万变的市场中脱颖而出。美摄科技&#xff0c;作为视频处理技术的领航者&#xff0c;以其革命性的视频转场SDK&#xff0c;为企业视频创作带来了前所未有的创意与效率飞跃。 重塑转场艺术&#xff0c;激发创意…

el-table 表格列宽自适应

思路&#xff1a;获取当前列的最长数据和表头名称比较&#xff0c;取大值赋值给宽度。 效果图 自适应前 自适应后 自适应方法 // col 里面包含了表头字段和名称&#xff0c;list 是表格数据 columnWidth(col, list) {let prop col.prop, lab col.lab;let width 90; // 设…