一:首先建立一個項目 而後建兩個包,分別是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)