【Django5】内置Admin系统

系列文章目录

第一章 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 adminfrom 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 = 10list_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.rhkb.cn/news/387337.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚观早报 | 华为nova Flip官宣;苹果iOS 17.6正式版发布

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 7月31日消息 华为nova Flip官宣 苹果iOS 17.6正式版发布 方程豹豹5全系降价 vivo X200 Pro主摄参数 谷歌Pixel …

PHP经销商订货管理系统小程序源码

经销商订货管理系统:重塑供应链效率的利器 🚀 开篇:解锁供应链管理的新纪元 在竞争激烈的商业环境中,经销商作为供应链的关键一环,其订货效率直接影响到整个供应链的流畅度和响应速度。传统的订货方式往往繁琐、易出…

Android mLruProcesses的分布结构

AMS中的进程管理 final ArrayList<ProcessRecord> mLruProcesses new ArrayList<ProcessRecord>(); 在AMS的内部属性中使用mLruProcesses集合保存所有的进程信息&#xff0c;AMS将所有进程按照优先级从低到高的顺序保存着对应的ProcessRecord信息&#xff0c;即排…

day06 项目实践:router,axios

vue组件的生命周期钩子 今天几乎没有讲什么新内容&#xff0c;就是一起做项目&#xff0c;只有一个小小的知识点&#xff0c;就是关于vue组件的生命周期钩子&#xff0c;其中最重要的四个函数—— beforeCreate()&#xff1a;组件创建之间执行 created()&#xff1a;组件创建…

react.16+

1、函数式组件 在vite脚手架中执行&#xff1a; app.jsx: import { useState } from react import reactLogo from ./assets/react.svg import viteLogo from /vite.svg import ./App.cssfunction App() {console.log(this)return <h2>我是函数式组件</h2> }exp…

【自学深度学习梳理2】深度学习基础

一、优化方法 上一篇说到,使用梯度下降进行优化模型参数,可能会卡在局部最小值,或优化方法不合适永远找不到具有最优参数的函数。 1、局部最小值 梯度下降如何工作? 梯度下降是一种优化算法,用于最小化损失函数,即寻找一组模型参数,使得损失函数的值最小(局部最小值…

【JavaSE-线程安全问题-死锁详解】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a; c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 &#x1f308;…

医疗器械网络安全 | 第三方组件安全检测怎么做?

医疗器械软件安全中的第三方组件安全检测是确保医疗器械软件整体安全性的重要环节。以下是如何进行第三方组件安全检测的详细步骤&#xff1a; 一、明确检测目标 首先&#xff0c;需要明确检测的目标和范围&#xff0c;即确定哪些第三方组件需要进行安全检测。这通常包括操作系…

【C#】 使用GDI+获取两个多边形区域相交、非相交区域

一、使用GDI获取两个多边形区域相交、非相交区域 在 C# 中使用 GDI&#xff08;Graphics Device Interface Plus&#xff09;处理图形时&#xff0c;你可以使用 System.Drawing 和 System.Drawing.Drawing2D 命名空间中的类来操作区域&#xff08;Region&#xff09;。下面是一…

JS中如何对数组或者数组对象中所有的元素进行快速判断(every、some)

every是判断数组中所有元素均满足某个条件&#xff0c;some是判断数组中任意一个元素满足条件 举个栗子&#xff1a; const arr1 [{name:谭,},{name:谭},{name:高}]; const arr2 [{name:谭,},{name:谭},{name:谭}];const result1 arr1.every(item > item.name 谭);cons…

7月29(信息差)

&#x1f30d;最强模型 Llama 3.1 如期而至&#xff01;扎克伯格最新访谈&#xff1a;Llama 会成为 AI 界的 Linux &#x1f384;谷歌AlphaProof攻克国际奥赛数学题 https://www.51cto.com/article/793632.html ✨SearchGPT第一波评测来了&#xff01;响应速度超快还没广告&…

基于bert的自动对对联系统

目录 概述 演示效果 核心逻辑 使用方式 1.裁剪数据集 根据自己的需要选择 2.用couplet数据集训练模型 模型存储在model文件夹中 3.将模型转换为ONNX格式 4.打开index.html就可以在前端使用此自动对对联系统了。 本文所涉及所有资源均在传知代码平台可获取。 概述 这个生成器利用…

学习c语言第十八天(指针笔试题)

一维数组 字符数组 char*p"abcdef" p里面放的是a元素的地址 二维数组 指针笔试题 第一题 2 5 第二题 第三题 第四题 第五题 第六题 10 5 第七题 at 第八题 POINT ER ST EW

迪文屏使用记录

项目中要使用到迪文屏&#xff0c;奈何该屏资料太琐碎&#xff0c;找的人头皮发麻&#xff0c;遂进行相关整理。 屏幕&#xff1a;2.4寸电容屏 型号&#xff1a;DWG32240C024_03WTC 软件&#xff1a;DGUS_V7.647 1.竖屏横显 打开软件左下方的配置文件生成工具&#…

AI绘画【stable diffusion 1.5 Lora模型】摄影级真人写真,逼真大片!唯美!看完被震撼了!

前言 今天是鲜花摄像方面推荐的第四款SD 1.5 Lora模型&#xff0c;也是近日鲜花方面最后一款推荐的模型——**NAL_花海与车_摄影系列。**该款模型灵感来自于一张坐在车里的艺术照&#xff0c;lora主要作用于添加了花植物之类的填充效果&#xff0c;还有车内的坐姿&#xff0c;…

网络安全等级保护:上下文中的API安全性

网络安全等级保护&#xff1a;什么是API安全&#xff1f; 上下文中的API安全性 应用程序编程接口安全性位于多个安全学科的交叉点&#xff0c;如图所示。其中最重要的是以下三个领域&#xff1a; 1.信息安全&#xff08;InfoSec&#xff09;涉及在信息的整个生命周期中保护信…

智能城市管理系统设计思路详解:集成InfluxDB、Grafana和MQTTx协议(代码示例)

引言 随着城市化进程的加快&#xff0c;城市管理面临越来越多的挑战。智能城市管理系统的出现&#xff0c;为城市的基础设施管理、资源优化和数据分析提供了现代化的解决方案。本文将详细介绍一个基于开源技术的智能城市管理系统&#xff0c;涵盖系统功能、技术实现、环境搭建…

【C++】选择结构- 嵌套if语句

嵌套if语句的语法格式&#xff1a; if(条件1) { if(条件1满足后判断是否满足此条件) {条件2满足后执行的操作} else {条件2不满足执行的操作} } 下面是一个实例 #include<iostream> using namespace std;int main4() {/*提示用户输入一个高考分数&#xff0c;根据分…

市面上的开放式耳机为什么很少?开放式耳机推荐分享

市面上开放式耳机少是有不少原因的。 首先&#xff0c;开放式耳机在隔音和防漏音方面存在挑战。对于很多用户来说&#xff0c;在公共场合使用耳机时&#xff0c;不希望声音外泄影响他人&#xff0c;也不希望外界声音过多干扰自己。而开放式耳机在这两点上较难做到平衡&#xf…

基于Spring boot + Vue的加油站系统

项目名称&#xff1a;加油站系统 作者的B站地址&#xff1a;程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csdn地址&#xff1a;程序员云翼-CSDN博客 1.项目技术栈&#xff1a; 前后端分离的项目 后端&#xff1a;Springboot MybatisPlus 前端&#xff1a;Vue…