Django--组件--admin组件的源码

 

一:启动

 

当启动Django时,会执行  setting.py  中的组件django

INSTALLED_APPS = [
    'django.contrib.admin', 'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'school.apps.SchoolConfig',
]

 

 

也就是会扫描admin组件session

from django.contrib import admin

 

 

from django.contrib.admin.decorators import register
from django.contrib.admin.filters import (
    AllValuesFieldListFilter, BooleanFieldListFilter, ChoicesFieldListFilter,
    DateFieldListFilter, FieldListFilter, ListFilter, RelatedFieldListFilter,
    RelatedOnlyFieldListFilter, SimpleListFilter,
)
from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
from django.contrib.admin.options import (
    HORIZONTAL, VERTICAL, ModelAdmin, StackedInline, TabularInline,
)
from django.contrib.admin.sites import AdminSite, site from django.utils.module_loading import autodiscover_modules

__all__ = [
    "register", "ACTION_CHECKBOX_NAME", "ModelAdmin", "HORIZONTAL", "VERTICAL",
    "StackedInline", "TabularInline", "AdminSite", "site", "ListFilter",
    "SimpleListFilter", "FieldListFilter", "BooleanFieldListFilter",
    "RelatedFieldListFilter", "ChoicesFieldListFilter", "DateFieldListFilter",
    "AllValuesFieldListFilter", "RelatedOnlyFieldListFilter", "autodiscover",
]


def autodiscover(): autodiscover_modules('admin', register_to=site) #这句话就是扫描每一个组件中的admin.py文件


default_app_config = 'django.contrib.admin.apps.AdminConfig'

 

 

能够看下from django.contrib.admin.sites import AdminSite, site
site = DefaultAdminSite()  #单例模式,共用一个对象

 

 

 

总结:app

启动Django加载admin组件spa

  (1)from django.contrib.admin.sites import AdminSite, site  这里有一个单例对象code

        site = DefaultAdminSite()对象

  (2)扫描每一个组件下的admin.py   blog

    autodiscover_modules('admin', register_to=site)

二:注册

 扫描admin.py文件it

 

from django.contrib import admin


class PublishConfig(admin.ModelAdmin):
    list_display = ['name']

admin.site.register(Publish,PublishConfig)  #admin.site就是那个单例模式,因此这些都是公用一个对象
admin.site.register(Author)
相关文章
相关标签/搜索