简介
Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件。
基本用法:
配置路由,项目中默认已经配置:
from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), ]
注册model:
from django.contrib import admin from . import models admin.site.register(models.UserInfo)
admin会自动创建路由映射关系,格式如下:
/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 路由系统的本质
加载setting.py配置
INSTALLED_APPS = [ 'django.contrib.admin', # ....... ]
寻找admin模块,
django.contrib.admin
的__init__.py
中:def autodiscover(): autodiscover_modules('admin', register_to=site)
说明:Django自动去所有应用寻找admin.py模块,并执行
执行admin.py,注册model:
from django.contrib import admin from . import models admin.site.register(models.UserInfo)
admin.site.register()
中为site对象的_registry
字典赋值,key是model, value是model的配置类(具体查看源码)self._registry[model] = admin_class(model, self)
执行路由映射关系
url(r'^admin/', admin.site.urls)
再次调用site对象,执行
.urls
方法,循环site对象的_registry
属性,根据app和model名称,生成Django后台管理的url映射。我们在Django后台中执行的增删改查,其实就是执行了
ModelAdmin
中的以下方法:- def changelist_view() 显示列表
- def add_view()增加
- def change_view() 修改
- def delete_view() 删除