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


               

  • 相关阅读:
    Eclipse下搭建Django环境
    在pycharm中启动Django服务器
    Window10安装Django,并创建第一个Django项目
    windows10安装tensorflow CPU版本
    service中显示一个dialog
    xp局域网共享访问没权限处理
    java线程调度
    Java优雅停机
    jit编译原理
    java final思考
  • 原文地址:https://www.cnblogs.com/w-s-l123/p/8040490.html
Copyright © 2020-2023  润新知