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()

 

posted @ 2019-02-24 16:41  一路向北_听风  阅读(147)  评论(0)    收藏  举报