Admin执行步骤
启动文件:
1:创建app-----stark
2:在每个app中创建stark
3:django----admin----
4:在stark中写入:----------------------------------去以注册的所有的app中,找到stark.py文件并加载
from django.apps import AppConfig
class StarkConfing(AppConfig):
name = 'stark'
def ready(self):
from django.utils.module_loading import autodiscover_modules
autodiscover_modules('stark')
5:在settings中注册app:
路由系统:
一:运行程序,找到每个app下的admin.py执行并加载
1:--app01.admin.py
2:-创建admin.site中的对象---------------site下的----site = AdminSite()-----本质实例化一个对象
3:-执行对象的register方法---------------目的将注册类添加到_register中
4:--app02.admin.py
5:-用app01.admin.py创建的admin.site对象----site下的----site = AdminSite()----单例----以后不管谁来调用都使用这个对象。
admin.site是一个对象(单例模式创建),其中封装了_register
二:执行urls.py
1:--url(r'^admin/',admin.site.urls)----再次调用admin.site的urls属性
--admin.site.urls-----admin.site调用urls方法----(没加括号:在上面加@property,不加括号也能执行)
2:返回了一个元组,元组有三个元素------self.get_urls()----'admin'-----self.name
--@property
def urls(self):
return self.get_urls(), 'admin', self.name
--第一个是一个函数------self.get_urls()
--第一个函数返回的是一个列表-------列表中是url-------从某个地方读出来,放在列表中。
urlpatterns = [
url(r'^$', wrap(self.index), name='index'),
url(r'^login/$', self.login, name='login'),
url(r'^logout/$', wrap(self.logout), name='logout'),
url(r'^password_change/$', wrap(self.password_change, cacheable=True), name='password_change'),
url(r'^password_change/done/$', wrap(self.password_change_done, cacheable=True),
name='password_change_done'),
url(r'^jsi18n/$', wrap(self.i18n_javascript, cacheable=True), name='jsi18n'),
url(r'^r/(?P<content_type_id>d+)/(?P<object_id>.+)/$', wrap(contenttype_views.shortcut),
name='view_on_site'),
]
----([],None,None)
3:去admin.site中读出类,生成url,放在列表中。
--循环admin.site中的_register--------(里面放的注册类)
for k,v in admin.site._register.items():------k是类名--------v---model_admin的对象
--找到类的名称,将k命名为model_class---(model中的类)
for model_class,v in admin.site._register.items():
类名clas_list = model_class._meta.model_name--------------获取当前类名
--找到app名称
app名称app_name = model_class._meta.app_lable-------------获取当前类所在的app名称
--生成url
ual = url(r''{0}/{1}.format(app_name,clas_list),函数名,name='函数名')---------/.头../app名称.../类名称..../
--添加到列表
url_list = []
url.append(ual)
--每个类的增,删,改,查,分别对应一个函数。
---admin.site.urls---返回一个元组(self.get_urls,None,None)----get_urls返回一个列表[uels]
路由include:---------通过反射找到模块-----------找到parent-------url
1:定义一个函数-----定义一个列表-----生成四个url(增删查改)-----返回
def get_urls()
temp= [
url(r'^$'.format(app_name,cls_name),chagelest_view),
url(r'^add/$'.format(app_name,cls_name),add_view),
url(r'^(d+)del/$'.format(app_name,cls_name),del_view),
url(r'^(d+)change/$'.format(app_name,cls_name),change_view),
]
return temp
--循环admin.site中的_register--------(里面放的注册类)
for k,v in admin.site._register.items():------k是类名
--找到类的名称,将k命名为model_class---(model中的类)
for model_class,v in admin.site._register.items():
类名clas_list = model_class._meta.model_name--------------获取当前类名
--找到app名称
app名称app_name = model_class._meta.app_lable-------------获取当前类所在的app名称
--生成url,再添加一个元组----第一个元素是get_urls[],第二和第三个为None.
ual = url(r'{0}/{1}/.format(app_name,clas_list)',include(get_urls,None,None))---------/.头../app名称.../类名称..../增删查改/
--添加到列表
url_list = []
url.append(ual)