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使用multiprocessing模块实现带回调函数的异步调用方法
Apr 18 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
Apr 11 Python
Numpy数组转置的两种实现方法
Apr 17 Python
Python数据分析matplotlib设置多个子图的间距方法
Aug 03 Python
python使用插值法画出平滑曲线
Dec 15 Python
详解python破解zip文件密码的方法
Jan 13 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 Python
什么是Python中的匿名函数
Jun 02 Python
python实现二分类和多分类的ROC曲线教程
Jun 15 Python
python switch 实现多分支选择功能
Dec 21 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/05/04 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
2018/01/05 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
党员年终民主评议的自我评价
2013/11/05 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
资金申请报告范文
2015/05/14 职场文书
Python绘画好看的星空图
2022/03/17 Python