Django----Admin流程

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)


           

原文地址:https://www.cnblogs.com/w-s-l123/p/8040490.html