当前位置: 首页 > news >正文

Django之admin后台页面功能详解

一)对于admin的初了解

1.简介

Django是一种流行的Python Web开发框架,它提供了一个功能强大且易于使用的admin界面,用于管理网站的后台数据和功能。Django的admin界面是自动生成的,它根据你的模型类自动创建表单和列表视图。你只需将模型类注册到admin界面,就可以轻松地管理和操作数据库中的数据。
admin界面提供了各种功能,包括:

  1. 列表视图:以表格形式展示数据库中的数据,支持分页、搜索和排序功能,方便快速浏览和筛选数据。
  2. 表单视图:用于创建、编辑和删除数据库中的数据。Django的表单视图提供了丰富的表单字段类型,例如文本框、下拉列表、日期选择等,同时支持数据验证和错误提示。
  3. 权限控制:admin界面支持基于角色的权限控制,你可以定义不同的用户角色,并为每个角色分配不同的权限,从而限制用户对数据和功能的访问权限。
  4. 自定义界面:Django的admin界面可以通过自定义模板和样式进行个性化定制,你可以根据自己的需求修改界面的布局、颜色和图标等。
  5. 插件扩展:Django的admin界面支持插件扩展,你可以通过安装第三方插件来增加额外的功能和特性,例如图表展示、导入导出数据等。

总的来说,Django的admin界面为开发者提供了一个方便、快速和安全地管理和操作后台数据的工具,极大地提高了开发效率和用户体验。无论是小型项目还是大型企业应用,admin界面都是一个不可或缺的组成部分。

2.admin的位置

在我们创建了Django的项目后,我们在最原始的urls.py中就可以看见关于admin的路径:
image.png
如果要访问admin后台我们只需要输入以下网址:

http://127.0.0.1:8000/admin/

页面会自动跳转,读者也可根据自身的需求去改变urls.py中的路径。

二)admin的相关功能

1.创建超级用户

在创建超级用户前我们需要保证项目已经创建成功,连接了数据库并且成功执行力数据库的生成和迁移命令。
在启动Django项目后我们首次进入admin后台管理界面是需要用户名与密码的创建,我们需要在命令终端通过以下命令去创建超级用户,即管理员:

python manage.py createsuperuser

image.png
注意,这里的Password(密码)两次需要输入相同密码,长度至少八个字符(非强制要求),输入的密码不会显现。创建好的超级用户我们可以在auth_user表中看见:
image.png

2.管理界面的本地化

在初次进入admin后台界面的时候我们会发现页面全是英文,有太多的操作不便,我们可以操作控制将admin界面的语言本地化。
image.png
这里有两种方式都可以执行:

  • 在seetings.py文件中将配置项LANGUAGE_CODE的值设置为"zh-Hans",TIME_ZONE的值设置为"Asia/Shanghai"

image.png

  • 在seetings.py文件中配置项MIDDLEWARE(中间件)中添加本地化中间件"django.middleware.locale.LocaleMiddleware"

image.png
两种方式各有千秋,如果只是想要用本地语言来运行Django,并且该语言的语言文件存在,只需要第一种方式即可。如果要让每一个使用者各自指定语言偏好,就需要使用第二种方式。LocaleMiddleware 使得Django基于请求的数据进行语言选择,从而为每一位用户定制内容。它为每一个用户定制内容。
image.png

3.有关模型类

a.模型类的创建与注册

模型类的创建在前文《Django之ORM操作初了解》已经讲过,感兴趣的读者可以翻看前文,这里将给出一个例子给大家参考:

#借阅人模型
class taker(models.Model):taker_name = models.CharField(verbose_name="借阅人姓名",max_length=20,unique=True)taker_number = models.IntegerField(verbose_name="借阅人ID",default='0000')taker_identity = models.CharField(verbose_name="借阅人身份",choices=(("0","学生"),("1","教师")),max_length=20,default="0")

我们如果想要将其在admin后台显现处理啊,就需要在应用的admin.py文件中将其注册到后台,在这里同样也有两个方式将其注册:

  • 装饰器:
from django.contrib import admin
from .models import Goods@admin.register(Goods)
class xxx

一般需要操作展示数据或者定制时会使用此方式注册,不是很好理解是吧,给大家一个具体的例子:

@admin.register(taker)
class TakerAdmin(ImportExportModelAdmin):list_display = ("taker_name","taker_number","taker_identity")search_fields = ("taker_name","taker_number")

这里的xxx也就是我们在models.py中创建的类的名字,而之后如果我们想要控制这个类展现怎样的数据和其他功能的自定义我们就需要用装饰器的方式。

  • 使用admin.site.register()注册模型
# 语法 admin.site.register(模型名)
admin.site.register(xxxx)

同样,这里的xxxx也是我们在models.py中创建的类的名字,如果我们没有什么需要自定义的就只需要用这个方式注册模型。
注册了之后我们就可以在admin界面上查看到数据:
image.png

b.修改展示的名称

image.png
这样的模型名称与应用名称很不好让人理解,我们可以根据实际的情况修改。
我们先修改应用的名称,我们需要在应用的init.py文件中添加如下代码:

default_app_config = 'xxxx.apps.xxxxConfig'

这里的xxxx是应用的名称,apps是应用的包路径,而xxxxConfig是应用的配置类。
然后我们在应用的apps.py文件中使用verbose_name设置应用的名称:

from django.apps import AppConfig
class xxxxConfig(AppConfig):name = 'xxxx'verbose_name = '商品信息'

这里的xxxx意义相信大家都知道,而verbose_name中的就是我们需要展示出来的名称。
同样,修改模型名称也很简单,我们只需要在models.py文件中操作,如下:

from django.db import models
# Create your models here.
class xxxx(models.Model):...class Meta:verbose_name = '商品' # 模型名称(单数)verbose_name_plural = verbose_name # 模型名称(复数)

请注意Meta的缩进,其被我们的模型类所包括,在这使用verbose_name等命令去控制显示的名称:
image.png

c.数据的增删查改

我们的admin页面是自己携带了增删查改的界面,我们只需要去跟着操作就行,例如增加数据:
image.png
这里的操作数据库会自动同步,完全不用担心是否会造成数据混乱的问题。

d.定制列表页数据

前面我提到过,可以自定义展示的数据与功能,这里我简单给大家一些选项:

代码功能
list_display展示的数据字段
search_fields搜索的数据字段
list_filter过滤的数据字段
ordering排序的数据字段
exclude不显示的数据字段

那么如何使用呢,只需要在应用的admin.py文件中进行:

@admin.register(book)
class BookAdmin(admin.ModelAdmin):# 页面上展示的内容list_display = ("book_name","author", "book_price")

当然,也可用另外一个方式:

class BookAdmin(admin.ModelAdmin):list_display = ('id','name', 'price', 'stock', 'sales', 'create_time', 'update_time')admin.site.register(Book,BookAdmin)

当然,我个人较为推荐第一种方式,从我主观的角度来看较为清晰代码的解构。
image.png

e.定制编辑页数据

如果数据的展示我们可以自定义功能,那么编辑数据的编辑页我们自然也可控制,这里也给大家举一些例子:

代码功能
fields显示的数据字段;
支持以二维元组形式设置字段分栏显示,在fileds中一个元组表示一栏数据
fieldsets对可编辑的数据字段分组;
不可与fields一起用
readonly_fields只读的数据字段
save_on_top设置在这编辑页上面是否展现保存、删除等按钮,默认为False,不显示

f.自定义字段

自定义字段指与模型相关,但并不包含在模型中的字段,这种字段是定义在应用的admin.py文件中的一些函数,这些函数会将模型实例作为参数。也就是说假如我们类里设置了商品的单价与销售的数量,但是我们没有设置其销售额,该如何得到?利用自定义字段就可以解决:

def sales_volume(g):total = g.price * g.salesreturn f'{g.name}销售额为:{total}'sales_volume.short_description = '商品销售额' # 设置字段描述@admin.register(Goods)
class GoodsAdmin(admin.ModelAdmin):list_display = ('name', 'price', 'stock', 'sales', 'create_time', 'update_time',sales_volume)

4.认证与授权

Admin提供管理用户与组、用户与组权限的功能,使用超级用户登录后台管理系统后可以对用户或组进行增加,或变更用户与组的权限。
image.png
image.png

相关文章:

  • 1.1美术理论基础
  • C语言实现植物大战僵尸(完整版)
  • 【高数:1 映射与函数】
  • 算法刷题之数组篇
  • Java 并发编程面试题——Java 线程间通信方式
  • 原生微信小程序将字符串生成二维码图片
  • Qt OpenCV 学习(一):环境搭建
  • ❀My学习Linux命令小记录(16)❀
  • java一对一聊天
  • 架构师一1.功能权限
  • 深度学习——第3章 Python程序设计语言(3.2 Python程序流程控制)
  • CDA level-2 备考经验分享 转数据分析师CDA证书备考 考试相关说明
  • 2 文本分类入门:TextCNN
  • CentOS 7 安装并配置tomcat
  • DBeaver 如何在没有外网的情况下连接数据库(下载驱动)
  • python3.6+scrapy+mysql 爬虫实战
  • (三)从jvm层面了解线程的启动和停止
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Android交互
  • Docker容器管理
  • HTTP 简介
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • js学习笔记
  • JS学习笔记——闭包
  • Laravel Mix运行时关于es2015报错解决方案
  • PhantomJS 安装
  • python docx文档转html页面
  • python3 使用 asyncio 代替线程
  • React Transition Group -- Transition 组件
  • React的组件模式
  • Spring Boot MyBatis配置多种数据库
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 阿里云购买磁盘后挂载
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 十年未变!安全,谁之责?(下)
  • 数据科学 第 3 章 11 字符串处理
  • 算法系列——算法入门之递归分而治之思想的实现
  • 消息队列系列二(IOT中消息队列的应用)
  • 译自由幺半群
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • !$boo在php中什么意思,php前戏
  • #pragma data_seg 共享数据区(转)
  • $.ajax,axios,fetch三种ajax请求的区别
  • (2020)Java后端开发----(面试题和笔试题)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十六)一篇文章学会Java的常用API
  • (转)C#调用WebService 基础
  • *Django中的Ajax 纯js的书写样式1
  • .bat批处理出现中文乱码的情况
  • .gitignore