stark组件 - 制作启动文件
制作启动文件
在 django的apps文件中 :
在其他app中创建 'stark.py' 文件
from django.apps import AppConfig from django.utils.module_loading import autodiscover_modules class StarkConfig(AppConfig): name = 'stark' #重写了父类 AppConfig 中的ready该方法目的是在Django启动时运行代码。 def ready(self): #在django程序加载的时候自动去APP下寻找名为stark的py文件然后执行 autodiscover_modules('stark')
2. 在stark组件的apps.py中 AdminSite类
class AdminSite(object): ''' 1. 用于保存 数据库类和 处理该类的对象的对应关系 2. 实现路由分发,将路由分发给每一个处理该类的对象 (StarkConfig类或者他的派生类) ''' def __init__(self): self._registry = {} # 核心,实现了 用于保存 数据库类和 处理该类的对象的对应关系 # 用于路由分发 self.app_name = 'stark' self.namespace = 'stark' def register(self, model_class, stark_config=None): ''' 保存了数据库类以及处理该类的对象的对应关系 ''' if not stark_config: stark_config = StarkConfig self._registry[model_class] = stark_config(model_class, self) """ { models.UserInfo = StarkConfig(models.UserInfo) models.Role = RoleConfig(models.Role) -- RoleConfig 对象 } """ def get_urls(self): urlpatterns = [] for k, v in self._registry.items(): app_label = k._meta.app_label model_name = k._meta.model_name urlpatterns.append(url(r'^%s/%s' % (app_label, model_name), (v.urls,None,None))) return urlpatterns @property def urls(self): ''' 实现路由分发 ''' return self.get_urls(), self.app_name, self.namespace site = AdminSite()