Django之admin源码解析

(1)启动

从settings.py文件中的INSTALLED_APPS中找到循环加载执行所有已经注册的app中的admin的__init__.py文件

def autodiscover():

    autodiscover_modules('admin', register_to=site)

(2)执行代码各应用下的admin.py文件中的代码

#admin.py

class BookAdmin(admin.ModelAdmin):

    list_display = ("title",'publishDate', 'price')

admin.site.register(Book, BookAdmin)
admin.site.register(Publish)

(3)admin.site单例 

 

这里应用的是一个单例模式,对于AdminSite类的一个单例模式,执行的每一个app中的每一个admin.site都是一个对象

(4) 执行site.register()方法

Admin注册中:

admin.site.register(Book, BookAdmin)

admin.site.register(Publish)

在源码中:

class ModelAdmin(BaseModelAdmin):pass


def register(self, model_or_iterable, admin_class=None, **options):
    if not admin_class:
            admin_class = ModelAdmin
    # Instantiate the admin class to save in the registry
    self._registry[model] = admin_class(model, self)

(5) admin的URL配置

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r’^index/’,(get_urls(),None,None)),
]

 

posted @ 2018-07-21 16:42  桥前石头  阅读(89)  评论(0编辑  收藏  举报