zoukankan      html  css  js  c++  java
  • Django中urls.py中的分发,自己写Xadmin替代admin(83)

    分发

    from django.contrib import admin
    from django.urls import path
    
    from django.shortcuts import HttpResponse
    
    def test(request):
        return HttpResponse('test')
    
    def test01(request):
        return HttpResponse('test01')
    def test02(request):
        return HttpResponse('test02')
    def test03(request):
        return HttpResponse('test03')
    def test04(request):
        return HttpResponse('test04')
    def test05(request):
        return HttpResponse('test05')
    
    urlpatterns = [
        path('admin/', admin.site.urls),
    
      #结构固定,第二个和第三个固定为None        叫做一级分发
        path('yuan/', ([
                           path('test01/', ([
                               #二级分发
                                path('test04/', test04),
                                path('test05/', test05),
                                            ],None,None)),
            
                           path('test02/', test02),
                           path('test03/', test03),
                       ],None,None)),
    ]

     自己写的Xadmin

    from django.contrib import admin
    from django.urls import path,re_path
    
    from django.shortcuts import HttpResponse
    
    def test(request):
        return HttpResponse('test')
    
    def test01(request):
        return HttpResponse('test01')
    def test02(request):
        return HttpResponse('test02')
    def test03(request):
        return HttpResponse('test03')
    def test04(request):
        return HttpResponse('test04')
    def test05(request):
        return HttpResponse('test05')
    
    #查
    def list_view(request):
        return HttpResponse('list_view')
    #增
    def add_view(request):
        return HttpResponse('add_view')
    #改
    def change_view(request,id):
        return HttpResponse('change_view')
    #删
    def delete_view(request,id):
        return HttpResponse('delete_view')
    
    def get_urls_2():
        temp = []
    #实现增删改查功能 temp.append(re_path(
    '^$',list_view)) temp.append(re_path('^add/$',add_view)) temp.append(re_path('^(d+)/change/$',change_view)) temp.append(re_path('^(d+)/delete/$',delete_view)) return temp def get_urls(): print(admin.site._registry) temp = [] for model,admin_class_obj in admin.site._registry.items(): model_name = model._meta.model_name  #获得模块的名字 app_name = model._meta.app_label    #获得APP的名字 temp.append(path('{0}/{1}/'.format(app_name,model_name), (get_urls_2(),None,None)),)    #二级分发  一共实现了28条url return temp urlpatterns = [ path('admin/', admin.site.urls), path('Xadmin/', (get_urls(),None,None)),  #一级分发 ]

     自己写Xadmin替代admin

    具体看day83  Xadmin

    Xadmin.service.Xadmin

    from django.urls import path,re_path
    from django.shortcuts import HttpResponse
    
    #默认样式类
    class ModelXadmin(object):
        def __init__(self,model,site):
            self.model = model
            self.site = site
            
    
    class XadminSite(object):
        def __init__(self, name='admin'):
            self._registry = {}
    
        # 查
        def list_view(self,request):
            return HttpResponse('list_view')
    
        # 增
        def add_view(self,request):
            return HttpResponse('add_view')
    
        # 改
        def change_view(self,request, id):
            return HttpResponse('change_view')
    
        # 删
        def delete_view(self,request, id):
            return HttpResponse('delete_view')
    
        def get_urls2(self):
            temp = []
    
            temp.append(re_path('^$', self.list_view))
            temp.append(re_path('^add/$', self.add_view))
            temp.append(re_path('^(d+)/change/$', self.change_view))
            temp.append(re_path('^(d+)/delete/$', self.delete_view))
    
            return temp
    
        @property
        def urls2(self):
            return self.get_urls2(),None,None
        
        def get_urls(self):
            print("get_urls中的:",self._registry)
            temp = []
            for model, admin_class_obj in self._registry.items():
                model_name = model._meta.model_name
                app_name = model._meta.app_label
                temp.append(path('{0}/{1}/'.format(app_name, model_name), self.urls2), )
            return temp
    
        #将其由方法变为属性
        @property
        def urls(self):
            return self.get_urls(),None,None
    
        def register(self, model, admin_class=None, **options):
            if not admin_class:
                admin_class = ModelXadmin
    
            self._registry[model] = admin_class(model, self)
    
    site = XadminSite()
    View Code

     小知识

      model_name = model._meta.model_name  #获得模块的名字
      app_name = model._meta.app_label    #获得APP的名字

      

      obj = Book._meta.get_field('title')

      print(obj.verbose_name)          #可以获得我们给属性取的值

  • 相关阅读:
    程序员转型架构师,推荐你读这几本书
    Dubbo服务发现源码解析
    高可用架构之限流降级
    为什么Kafka速度那么快
    从分布式一致性到共识机制(三)拜占庭问题
    从分布式一致性到共识机制(二)Raft算法
    三分钟看完京东区块链白皮书
    轻松理解零知识证明
    三大去中心化交易协议对比
    从分布式一致性到共识机制(一)Paxos算法
  • 原文地址:https://www.cnblogs.com/liujie12/p/13086628.html
Copyright © 2011-2022 走看看