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)), ]