1、创建名为stark的app,确保其中有apps.py

from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules

class StarkConfig(AppConfig):
    name = \'stark\'

    def ready(self):
        autodiscover_modules(\'stark\')

2、在settings.py中的 INSTALLED_APPS 中加上stark.apps.StarkConfig:

INSTALLED_APPS = [
    \'django.contrib.admin\',
    \'django.contrib.auth\',
    \'django.contrib.contenttypes\',
    \'django.contrib.sessions\',
    \'django.contrib.messages\',
    \'django.contrib.staticfiles\',
    "stark.apps.StarkConfig"
]

3、启动Django时会执行apps中的ready函数,扫描并执行每一个app下的stark文件

# 这里为自定制的显示样式
class DepartmentConfig(stark.ModelStark):
    list_display = [\'title\',\'code\']

stark.site.register(Department,DepartmentConfig) #model表名,自定制样式类名
stark.site.register(UserInfo)

4、stark.site会实例化一个对象site。- 这里应用的是单例模式,每一个app中的每一个stark.site实例化的对象都是同一个

5、执行register方法

# 将样式类以表对象为键放进_registry字典里
def register(self, model, stark_config_class=None): if not stark_config_class: stark_config_class = ModelStark self._registry[model] = stark_config_class(model, self)

6、在总文件的urls.py中写:

urlpatterns = [
    url(r\'^stark/\', stark.site.urls),
]

  这时会执行urls方法:

  

  调用get_urls方法:

def get_urls(self):
    """
    生成每一张注册的表的增删改查url
    :return: 每一张注册过的表的增删改查url
    """
    urlpatterns = []
    for model, model_stark in self._registry.items():
        app_label = model._meta.app_label    # "app01"           "app01"
        model_name = model._meta.model_name  # "department"    "userinfo"
        # model_stark.urls 使用了url的分发功能
        c_url = url("^{0}/{1}/".format(app_label, model_name), model_stark.urls)
        urlpatterns.append(c_url)
    return urlpatterns

  其中model_stark.urls会执行样式类ModelStark里的urls方法

  

  执行get_urls方法:

def get_urls(self):
    app_model_name = (self.model._meta.app_label, self.model._meta.model_name)
    temp = [
        url("^$", self.wrapper(self.change_list), name="%s_%s_change_list" % app_model_name),
        url("^add/$", self.wrapper(self.add_view), name="%s_%s_add" % app_model_name),
        url("^(\d+)/change/?$", self.wrapper(self.change_view), name="%s_%s_change" % app_model_name),
        url("^(\d+)/delete/$", self.wrapper(self.delete_view), name="%s_%s_delete" % app_model_name),
    ]
    return temp

  到此,每一张注册过的表都会生成形似这样的urlpatterns:

"""
app_label:app名
model_name:表名
app_model_name:(app名,表名)
"""
urlpatterns = [
    url("^{0}/{1}/".format(app_label, model_name), [
        url("^$", self.wrapper(self.change_list), name="%s_%s_change_list" % app_model_name),
        url("^add/$", self.wrapper(self.add_view), name="%s_%s_add" % app_model_name),
        url("^(\d+)/change/?$", self.wrapper(self.change_view), name="%s_%s_change" % app_model_name),
        url("^(\d+)/delete/$", self.wrapper(self.delete_view), name="%s_%s_delete" % app_model_name),
    ])
]

 

版权声明:本文为value-code原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/value-code/articles/8477265.html