码迷,mamicode.com
首页 > 其他好文 > 详细

Django Admin 本质

时间:2017-10-22 17:12:25      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:elf   本质   install   自定义显示   delete   register   __init__   项目   因此   

  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 本质

标签:elf   本质   install   自定义显示   delete   register   __init__   项目   因此   

原文地址:http://www.cnblogs.com/78pikaqiu/p/7709966.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!