Django Admin 本质

Posted Optimus丶G

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django Admin 本质相关的知识,希望对你有一定的参考价值。

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

一、基本用法

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

from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
        url(r\'^admin/\', admin.site.urls),
    ]

  2.注册model:

from django.contrib import admin
from . import models

admin.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 admin
from . 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\']

自定义选项参见:http://www.cnblogs.com/wupeiqi/articles/7444717.html

 三、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 admin
from . import models

admin.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() 删除

 

以上是关于Django Admin 本质的主要内容,如果未能解决你的问题,请参考以下文章

django项目一:基于django2.2可重用登录与注册模块-admin后台

Django admin 将 HTML 实体转换为它们的字符

django路由层

Wordpress阻止访问wp admin€“wpsnipp.com网站你博客的Wordpress代码片段

Django 笔记 05 urls.py详解

django1.6 admin不能登录