Django admin组件的使用


Posted in Python onOctober 24, 2020

admin

adminDjango 自带的后台管理组件,你可以在 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 ,输入账户名与密码后,就可以看到这张表。

Django admin组件的使用

接下来就可以对该表进行增删改查了。

Django 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)

以下是配置完成后的样式,自行对应配置项进行配置后查看即可。

Django admin组件的使用

中文显示

如果想要在 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()

以上就是Django admin组件的使用的详细内容,更多关于Django admin组件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python读取键盘输入的2种方法
Jun 16 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
利用python如何处理百万条数据(适用java新手)
Jun 06 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
python实现RabbitMQ的消息队列的示例代码
Nov 08 Python
python生成九宫格图片
Nov 19 Python
opencv实现图片模糊和锐化操作
Nov 19 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
Python OOP类中的几种函数或方法总结
Feb 22 Python
Python从入门到精通之环境搭建教程图解
Sep 26 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
Python数据可视化常用4大绘图库原理详解
Oct 23 #Python
Python+OpenCV图像处理——实现轮廓发现
Oct 23 #Python
python 带时区的日期格式化操作
Oct 23 #Python
Python可视化工具如何实现动态图表
Oct 23 #Python
python 匿名函数与三元运算学习笔记
Oct 23 #Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 #Python
Python+OpenCV图像处理——实现直线检测
Oct 23 #Python
You might like
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
php探针不显示内存解决方法
2019/09/17 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
Maps Javascript
2007/01/22 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
js实现网页收藏功能
2015/12/17 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
详解angular2.x创建项目入门指令
2018/10/11 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
整理Python 常用string函数(收藏)
2016/05/30 Python
python K近邻算法的kd树实现
2018/09/06 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
Python3远程监控程序的实现方法
2019/07/15 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
物业门卫岗位职责
2013/12/28 职场文书
社区助残日活动总结
2014/08/29 职场文书
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL