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)
相關文章
相關標籤/搜索