django admin单例对象

一:首先建立一个项目 而后建两个包,分别是app01,app02,而后分别建立admin.py文件。python

建app的方式(两种)django

1:分别建包,建立文件app

2:在termnil里面输入:Python manage.py startapp  app01 对象

 

二:创建一个sites.py文件,写一个单利模式get

class AdminSite(object):
    def __init__(self, name='admin'):
        self._registry = {}

    def register(self, model,**options):

        self._registry[model] = model()

site=AdminSite()

三:分别在app01里面分别写两个类(狗和猫),从sites文件导入site对象it

from sites import site
class Dog(object):
    pass
site.register(Dog)
print(site._registry)

四:建立一个mian文件,从sites文件导入site对象,而后导入app01和app02的admin,分别起别名io

from sites import site

if __name__=='__main__':

    from app01 import admin as admin01
    from app02 import admin as admin02

总结:在四中打印结果(执行两个app中admin.py中两个print):class

 1 {<class 'app01.admin.Dog'>: <app01.admin.Dog object at 0x0000021B6E527320>}import


2 {<class 'app01.admin.Dog'>: <app01.admin.Dog object at 0x0000021B6E527320>,object

   <class 'app02.admin.Pig'>: <app02.admin.Pig object at 0x0000021B6E5214E0>}

由于按照上述代码执行后第一个print是狗对象,第二次调用的时候,是在已经存在py文件中狗对象中调用过来的,加上他本身猪的对象。也就是第一个对象生成后,之后对象都在第一个对象里面取。在调用都是第一个都是这个对象。

 

main文件

manage.py启动文件(建项目自带的)

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled1.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            import django
        except ImportError:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            )
        raise
    execute_from_command_line(sys.argv)
相关文章
相关标签/搜索