Django admin组件的使用
作者:云崖先生 发布时间:2021-05-20 06:03:08
admin
admin
是 Django
自带的后台管理组件,你可以在 admin 中执行增删改查等操作。
它以可视化的方式让你来操纵模型表,十分的便捷。
基本使用
数据准备
如下,在 app01
中有一个这样的模型表:
from django.db import models
# Create your models here.
class User(models.Model):
user_id = models.AutoField(primary_key=True, verbose_name="用户编号")
user_name = models.CharField(max_length=32, verbose_name="用户名")
user_gender = models.BooleanField(
choices=([0, "male"], [1, "female"]), verbose_name="用户性别")
user_introduction = models.TextField(
max_length=1024, null=True, blank=True, verbose_name="用户简介")
def __str__(self):
return self.user_name
创建用户
当运行了数据库迁徙命令后,需要创建一个可登录 admin
进行管理的超级账户。
python manage.py createsuperuser
它会提示你输入用户名,以及密码,密码不能少于八位。
可以选填邮箱。
注册admin
管理员用户创建完成后,在 app01
应用下进行注册。
from django.contrib import admin
from .models import *
admin.site.register(User)
接下来打开 admin
,输入账户名与密码后,就可以看到这张表。
接下来就可以对该表进行增删改查了。
深度配置
models参数
在创建模型表时,可以对字段添加一些与 admin
相关的参数。
参数 | 描述 |
---|---|
verbose_name | Admin中显示的字段名称 |
blank | Admin中进行添加或编辑时,该字段是否可以为空 |
editable | Admin中是否可编辑该字段 |
help_text | Admin中的帮助信息 |
choices | Admin中选择框显示的内容 |
在这里的 blank
与 verbose_name
以及 choices
都比较常用。
除了在模型表的字段上进行配置外,也可以在该表下定制元信息。这其中有关于该表在 Admin
中的信息显示,如下所示:
class User(models.Model):
字段 = 类型(条件)
字段 = 类型(条件)
class Meta:
verbose_name = "Admin中显示的表名"
admin配置
如果要对一个注册的表进行深度配置,可在 admin.py
中对它进行。
常用的配置方式有两种,如下所示:
from django.contrib import admin
# 装饰器注册
@admin.register(User)
class UserConfig(admin.ModelAdmin):
配置项....
# 使用site
class UserConfig(admin.ModelAdmin):
配置项....
admin.site.register(CustomAdmin, UserConfig) # 应用配置项
下面是 admin 深度配置的一些常用选项。
from django.contrib import admin
from .models import *
# Register your models here.
class UserConfig(admin.ModelAdmin):
# 自定义字段,作用显示
def edit(self):
return "编辑"
# 以下是自定义admin的使用
# 添加数据模板页
# add_form_template = None
# 修改数据的模板页
# change_form_template = None
# 修改多条数据的模板页
# change_list_template = None
# 删除确认信息模板页
# delete_confirmation_template = None
# 删除关联数据的确认页
# delete_selected_confirmation_template = None
# 修改历史的模板页
# object_history_template = None
# 弹出框模板页
# popup_response_template = None
# 不支持多对多字段,展示表中的字段。
list_display = ["user_id", "user_name","user_gender",edit]
# 点击字段可进入change页面
list_display_links = [edit]
# 过滤筛选,支持各种关系
list_filter = ["user_gender"]
# 支持在页面修改的字段,与list_display_links有冲突
list_editable = ["user_name"]
# 模糊搜索,可以按照编号、名字搜索.或关系
search_fields = ["user_id","user_name"]
# 用于和action定制项做批处理
def patch_init(self,request,queryset):
"""
queryset:选中的字典
"""
# 选中的用户全改为男性...
queryset.update(user_gender=False)
# 添加描述
patch_init.short_description = "批量修改性别"
actions = [patch_init]
admin.site.register(User)
以下是配置完成后的样式,自行对应配置项进行配置后查看即可。
中文显示
如果想要在 admin
中进行中文显示,则可以在全局的 settings.py
中配置语言。
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-Hans' # 中文显示
执行流程
在启动 django
项目时,第一步会去 settings
中导入各种模块。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config',
]
查看 admin
源码 from django.contrib import admin
,它下面有这样的一个函数,该函数的作用就是将所有 app
下的 admin
都会做一次导入。
def autodiscover():
autodiscover_modules('admin', register_to=site)
我们知道,在模块导入时,会运行该模块中的代码,那么在 admin.site
进行注册时,实际上是应用单例模式进行注册。
使用 admin.site.register()
实际上都是在使用单例对象下的方法,并不会重复生成多个对象。
class AdminSite(object):
def __init__(self):
self._registry = {}
def register(self, model, admin_class = None):
# 设置配置类
if not admin_class:
admin_class = ModelAdmin
self._registry[model] = admin_class(model, self)
site = AdminSite() # 最后一行
admin
中单例对象的应用也非常简单,它是以模块的方式应用单例对象,因为我们知道模块只会执行一次。
如下所示:
# f1.py 模块
class Test(object):
def __init__(self,name):
self.name = name
t1 = Test("测试")
当其他文件进行多次导入时,只会导入一次,此时使用的 t1 永远都是单例对象,不会重复实例化:
import f1
f1.t1()
来源:https://www.cnblogs.com/Yunya-Cnblogs/p/13864356.html?utm_source=tuicool&utm_medium=referral
猜你喜欢
- 博主最近试在服务器上进行spark编程,因此,在开始编程作业之前,要先搭建一个便利的编程环境,这样才能做到舒心地开发。本文主要有以下内容:1
- MySQL函数CONCAT、CONCAT_WS、GROUP_CONCAT1.concat()函数CONCAT 函数用于将两个字符串连接为一个
- 1 PHP官网地址:PHP界面:2 下载官网下载地址:Download PHP 或者点击这里下载3 安装① 按照下图下载 php。
- 在工作中碰到这么一个问题:给定一个已经排序的数组(升序),删除数组中重复的数据,但是只能使用一个数组,这个数组的大小可以变化. 例子:&nb
- 今天继续给大家介绍Python相关知识,本文主要内容是Python asyncio异步编程简单实现。一、asyncio事件循环简介async
- 1在js中只有两种作用域a:全局作用域b:函数作用域在ES6之前,js是没有块级作用域。首先来解释一下什么是没有块级作用域?所以此时 是可以
- 什么叫模板继承呢在我的理解就是:在前端页面中肯定有很多页面中有很多相同的地方,比如页面顶部的导航栏,底部的页脚等部分,这时候如果每一个页面都
- 前言一向用Python 3,最近研究微信公众号开发,各云平台只支持Python 2.7,想用其他版本需要自己搭建环境。而网上又搜不到Pyth
- 代码如下:--PK select * from sys.key_constraints where object_id = OBJECT_
- 一 引入我们学习变量是为了让计算机能够像人一样去记忆事物的某种状态,而变量的值就是用来存储事物状态的,很明显事物的状态分成不同种类的(比如人
- 1. 如何停止任务?我们可以通过 asyncio.Task 对象上的 cancel() 方法取消任务。如果任务被取消,cancel() 方法
- 在进行数据分析的时候,会把把一些具有多个特征的样本数据进行拼接合并吗,放在一起分析,预测....下面是用numpy中的函数进行数组的拼接。(
- 问题描述: echarts柱状堆叠图,是很常用的图表,官网的例子很简单 。图例(legend),x轴(xAxis)都是
- MySQL字符集:cp1252 West European (latin1) ,解决乱码问题 使用虚拟主机空间上的phpmyadmin操作数
- 本文实例为大家分享了python购物车程序的具体代码,供大家参考,具体内容如下代码:''''' Cr
- FFmpeg 是视频处理最常用的开源软件。它功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes),也是许
- 认证登录django.contrib.auth中提供了许多方法,这里主要介绍其中的三个:1 authenticate(**cre
- 微信这个东西估计宅男没几个不熟悉的吧,微信经过这么两年多的发展终于向开放平台跨出了友好的一步。蛋疼的以为微信会出一个详细的api等接口,兴奋
- 前戏有时候生产环境是以项目来命名,有时候会出现更名情况,其实如何安全的更改数据库名,是个非常棘手的问题,特别是针对 MySQL 来数据库来说
- 一. valid卷积的梯度我们分两种不同的情况讨论valid卷积的梯度:第一种情况,在已知卷积核的情况下,对未知张量求导(即对张量中每一个变