一:首先建立一个项目 而后建两个包,分别是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)