Django admin组件的使用

作者:云崖先生 时间:2021-05-20 06:03:08 

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_nameAdmin中显示的字段名称
blankAdmin中进行添加或编辑时,该字段是否可以为空
editableAdmin中是否可编辑该字段
help_textAdmin中的帮助信息
choicesAdmin中选择框显示的内容

在这里的 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()

来源:https://www.cnblogs.com/Yunya-Cnblogs/p/13864356.html?utm_source=tuicool&utm_medium=referral

标签:Django,admin,组件
0
投稿

猜你喜欢

  • 用python3 返回鼠标位置的实现方法(带界面)

    2021-07-17 15:11:40
  • 详解利用Python scipy.signal.filtfilt() 实现信号滤波

    2022-09-23 21:23:03
  • 用于WebKit的CSS诀窍[译]

    2009-03-11 20:03:00
  • 在MAC上搭建python数据分析开发环境

    2022-04-27 21:44:10
  • pyinstaller打包后,配置文件无法正常读取的解决

    2022-12-17 18:22:09
  • 浅谈解除装饰器作用(python3新增)

    2022-05-30 03:31:52
  • Linux服务器上安装Python3的两种方式

    2022-01-23 12:13:39
  • Django实现文件上传和下载功能

    2022-04-02 15:19:34
  • golang中new与make的区别讲解

    2024-05-09 14:55:15
  • win10下python3.5.2和tensorflow安装环境搭建教程

    2022-11-05 15:56:21
  • Python学习小技巧总结

    2021-09-21 09:28:49
  • JS实现淡入淡出图片效果的方法分析

    2023-08-24 08:45:44
  • 优雅地使用loading(推荐)

    2024-04-30 08:42:01
  • 两种与SQL Server数据库交换数据的方法

    2008-12-10 15:39:00
  • Python对小数进行除法运算的正确方法示例

    2021-06-19 08:42:18
  • Python图像处理库PIL的ImageDraw模块介绍详解

    2022-06-29 04:18:20
  • 使用Python的turtle模块画国旗

    2021-10-22 12:31:10
  • vscode配置go开发环境的实战过程

    2024-04-28 09:17:38
  • 安全校验Session验证码并避免绕开验证码攻击

    2022-06-30 20:15:41
  • 深入理解Python中变量赋值的问题

    2023-03-20 00:28:07
  • asp之家 网络编程 m.aspxhome.com