一、创建app,生成url
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), ]) ]