博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django Admin 本质
阅读量:4662 次
发布时间:2019-06-09

本文共 1799 字,大约阅读时间需要 5 分钟。

  Django内置的Admin是对于app中的model数据表数据进行增删改查提供的组件。

一、基本用法

  1.配置路由。Django项目中默认已经配置:

from django.conf.urls import urlfrom django.contrib import adminurlpatterns = [        url(r'^admin/', admin.site.urls),    ]

  2.注册model:

from django.contrib import adminfrom . import modelsadmin.site.register(models.UserInfo)

  3.通过查看admin源码我们知道,admin会自动创建路由映射关系(url),格式如下:

/admin/app名称/model名称/ 列表 /admin/app名称/model名称/add/ 增加 /admin/app名称/model名称/ID值/change/ 修改 /admin/app名称/model名称/ID值/delete/ 删除 ......

二、定制Admin

  通过将model 注册admin.site.register(models.UserInfo),可以提供基本后台管理的功能。通过查看源码,我们还知道register()函数默认还接收了第二个参数:ModelAdmin,它是一个配置类,实例化时接收model和site 对象,为给定model封装所有管理员选项和功能。因此通过继承ModelAdmin类,即可自定义个性化Admin:

from django.contrib import adminfrom . import models# 方式一:class MyConfig(admin.ModelAdmin):    # 自定义显示字段    list_display = ['id', 'name', 'email']admin.site.register(models.UserInfo, MyConfig)# 方式二:@admin.register(models.UserInfo)class MyConfig(admin.ModelAdmin):    list_display = ['id', 'name', 'email']

自定义选项参见:

 三、Admin路由系统的本质

   1.加载setting.py配置

INSTALLED_APPS = [    'django.contrib.admin',    # .......]

  2.寻找admin模块,django.contrib.admin__init__.py中:

def autodiscover():    autodiscover_modules('admin', register_to=site)

  说明:Django会自动去所有应用中寻找admin.py模块,并执行

  3.执行admin.py,注册model:

from django.contrib import adminfrom . import modelsadmin.site.register(models.UserInfo)

  4.admin.site.register()中为site对象的_registry字典赋值,key是model,value是model 的配置类

self._registry[model] = admin_class(model, self)

  5.执行路由映射关系

url(r'^admin/', admin.site.urls)

  再次调用site对象下的urls方法,循环site的_registry属性,根据app和model名称,生成Django后台管理的url映射。

  6.我们在Django后台中执行的增删改查,其实就是执行了ModelAdmin中的以下方法:

def changelist_view() 显示列表def add_view()增加def change_view() 修改def delete_view() 删除

 

转载于:https://www.cnblogs.com/78pikaqiu/p/7709966.html

你可能感兴趣的文章