• Django-admin流程


    - admin源码流程
            a. 运行程序,找到每一个app中的 admin.py 文件,并加载
                - app01.admin.py 
                    - 创建admin.site中的对象
                    - 执行对象的 register方法,目的:将注册类添加到 _registry中 
                        _registry = {  
                            key是传进来的model   value:是ModelAdmin的对象,传了两个参数
                            models.Role: ModelAdmin(models.Role,admin.site),
                            models.UserInfo: ModelAdmin(models.UserInfo,admin.site)
                            models.UserType: ModelAdmin(models.UserType,admin.site)
                        }
                    
                - app02.admin.py
                    - 用app01.admin中创建那个admin.site对象
                    - 执行对象的 register方法,目的:讲注册类添加到 _registry中 
                        _registry = {
                            models.Role: ModelAdmin(models.Role,admin.site),
                            models.UserInfo: ModelAdmin(models.UserInfo,admin.site)
                            models.UserType: ModelAdmin(models.UserType,admin.site)
                            models.Article: ModelAdmin(models.Article,admin.site)
                        }
            
                admin.site是一个对象(单例模式创建),其中封装了: 
                    _registry = {
                        models.Role: ModelAdmin(models.Role,admin.site),
                        models.UserInfo: ModelAdmin(models.UserInfo,admin.site)
                        models.UserType: ModelAdmin(models.UserType,admin.site)
                        models.Article: ModelAdmin(models.Article,admin.site)
                    }
            b. urls.py 
                再次调用 admin.site 对象的 urls属性:
                    urlpatterns = [
                        url(r'^admin/', admin.site.urls),
                    ]
                
                class ModelAdmin(object):
                    def __init__(self,model_class,site):
                        self.model_class = model_class
                        self.site = site 
                        
                    def changelist_view(self,request):
                        data_list = self.model_class.objects.all()   #是动态的
                        return HttpResponse('列表页面')
    
                    def add_view(self,request):
                        return HttpResponse('添加页面')
    
    
                    def delete_view(self,request,nid):
                        return HttpResponse('删除页面')
    
                    def change_view(self,request,nid):
                        return HttpResponse('修改页面')
                    
                    def get_urls(self):
                         urlpatterns = [
                            url(r'^$', self.changelist_view),
                            url(r'^add/$', self.add_view),
                            url(r'^(.+)/delete/$', self.delete_view),
                            url(r'^(.+)/change/$', self.change_view),
                        ]
                        return urlpatterns
                    
                    @property 
                    def urls(self):
                        return self.get_urls()
                    
                
                class AdminSite(object):
                    def __init__(self):
                        self._registry = {}
                        
                    def register(self,model_class,model_admin):
                        self._registry[model_class] = model_admin(model_class,self)
                    
                    def get_urls(self):
                        """
                        models.Role: ModelAdmin(models.Role,admin.site),
                        models.UserInfo: ModelAdmin(models.UserInfo,admin.site)
                        models.UserType: ModelAdmin(models.UserType,admin.site)
                        models.Article: ModelAdmin(models.Article,admin.site)
                        """
                        url_list = []
                        for model_class,model_admin in self._registry.items():
                            model_class是一个类
                            app_name = model_class._meta.app_label
                            model_name = model_class._meta.model_name 
                            url_list += [
                                url('%s/%s' %(app_name,model_name,), include(model_admin.urls))
                            ]
                            
                        return url_list
                            
                    
                    @property
                    def urls(self):
                        return (self.get_urls(), None,None )
                

    参考博客1:http://www.cnblogs.com/wupeiqi/articles/7444717.html 

    参考博客2:http://www.cnblogs.com/haiyan123/p/8034430.html

     

  • 相关阅读:
    发款php蜘蛛统计插件只要有mysql就可用
    利用mysql来做一个功能强大的在线计算器
    IndexOf、lastIndexOf、substring的用法
    需求分析工具的软件
    JSP程序设计
    灵活有效的数据仓库解决方案:第1部分:客户互动和项目计划
    灵活有效的数据仓库解决方案,第3部分:设计并实现仓库ETL过程
    Devpress.XtraGrid.GridControl.GridView 属性
    8种人将被淘汰
    WCF配置中遇到的问题:如何把Hostname修改成IP
  • 原文地址:https://www.cnblogs.com/52-qq/p/8532976.html
Copyright © 2020-2023  润新知