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)          #可以获得我们给属性取的值

  • 相关阅读:
    c# WinForm 定时执行某个后台操作 如把B文件夹下的文件Copy到A文件夹下
    c# 创建指定大小的空字符填充的文本文件 在指定位置读写相关内容
    c# DirectShow 通过IAMVideoProcAmp的Set方法 来设置视频图像的Brightness 调整亮度
    [转]灰度图像的腐蚀算法和细化算法(C#代码)
    利用fleximage实现图片上传
    利用acts_as_ferret实现全文检索
    纯CSS无hacks的跨游览器多列布局
    IE私有CSS样式属性一览
    利用thinking sphinx实现全文检索
    搭建rails运行环境
  • 原文地址:https://www.cnblogs.com/liujie12/p/13086628.html
Copyright © 2011-2022 走看看