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 相关文章推荐
Linux下使用python自动修改本机网关代码分享
May 21 Python
python字符串过滤性能比较5种方法
Jun 22 Python
Python基于Socket实现的简单聊天程序示例
Aug 05 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
Apr 05 Python
Python 的AES加密与解密实现
Jul 09 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
python3.8 微信发送服务器监控报警消息代码实现
Nov 05 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 Python
使用Python爬取Json数据的示例代码
Dec 07 Python
Python 读取千万级数据自动写入 MySQL 数据库
Jun 28 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
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
jQuery修改class属性和CSS样式整理
2015/01/30 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
实例讲解Python3中abs()函数
2019/02/19 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
机器学习实战之knn算法pandas
2019/06/22 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
土木工程师职业规划范文
2014/03/07 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
python基础之while循环语句的使用
2021/04/20 Python
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技