Django admin组件 (2)

   在启动django项目时,第一步会去settings中导入各种模块。

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

   查看admin源码from django.contrib import admin,它下面有这样的一个函数,该函数的作用就是将所有app下的admin都会做一次导入。

def autodiscover(): autodiscover_modules('admin', register_to=site)

   我们知道,在模块导入时,会运行该模块中的代码,那么在admin.site进行注册时,实际上是应用单例模式进行注册。

   使用admin.site.register()实际上都是在使用单例对象下的方法,并不会重复生成多个对象。

class AdminSite(object): def __init__(self): self._registry = {} def register(self, model, admin_class = None): # 设置配置类 if not admin_class: admin_class = ModelAdmin self._registry[model] = admin_class(model, self) site = AdminSite() # 最后一行

   admin中单例对象的应用也非常简单,它是以模块的方式应用单例对象,因为我们知道模块只会执行一次。

   如下所示:

# f1.py 模块 class Test(object): def __init__(self,name): self.name = name t1 = Test("测试")

   当其他文件进行多次导入时,只会导入一次,此时使用的t1永远都是单例对象,不会重复实例化:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfwsw.html