zoukankan      html  css  js  c++  java
  • stark 组件 url 二级分发的实现

    模拟 admin 组件url设计思路

    项目urls 文件中:

    from django.contrib import admin
    from django.urls import path
    from stark.service.sites import site
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('stark/', site.urls),
    
    ]

    1.路径设计格式:列表中放路径

    1.第一级路径  :path ("stark/" , ([path1,path2,path3,......] ,None,None) )    或    path( “stark/”, urls1 )    #  urls1  可以是一个函数的返回值,该函数的返回值为元组,元组第一个

    元素为一个列表,第二和第三个元素分别为None  

    @property

    def urls(self):

      temp=[ ]

      for  model ,config_obj  in  self._registry.items():

        app_label = model._meta.app_label

        model_name =model._meta.model_name

        temp.append(

          path("%s/%s/".%(app_label,model_name), congfig.urls)

        )

      return temp, None,None

        

    2.第二级路径 path1 :  path (" app_name/model_name" , ([ path1,path2,path3,........] ,None,None) )  或  path("%s/%s/".%(app_label,model_name), congfig.urls)

    config.urls 该函数:

    def  urls(self):

      temp=[

        path (" ", self.list_view),

        path("add" ,self.add_view),

        path("change",self.change_view),

        path("delete",self.delete_view)

      ]

      return temp,None,None

    二. stark 组件中 sites文件中  urls 的设计  :

    from django.urls import path,re_path
    from django.shortcuts import HttpResponse,render,redirect
    
    
    class ModelStark():
    
        def __init__(self,model):
            self.model = model
    
    
        def list_view(self,request):
            model_name = self.model._meta.model_name
    
            return render(request,"list_view.html",locals())
    
        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_urls(self):
    
            temp=[
                path('', self.list_view),
                path('add/', self.add_view),
                re_path('(d+)/change/', self.change_view),
                re_path('(d+)/delete/', self.delete_view),
            ]
            
            return temp
    
        @property
        def urls(self):
            return self.get_urls(),None,None
    
    
    class StarkSite(): # 基础类,用于注册
    
        def __init__(self):
    
            self._registry={}  #用于注册模型类 ,以及配置模型类
    
        def register(self,model,Stark_class=None):
    
            Stark_class = Stark_class or ModelStark
    
            self._registry[model] = Stark_class(model)
    
    
    
        def get_urls(self):
            temp=[]
            for model,config_obj in self._registry.items():
                model_name = model._meta.model_name
                app_label = model._meta.app_label
                temp.append(
                    path("%s/%s/"%(app_label,model_name),config_obj.urls)
                )
                # print(temp)
    
            return temp
    
        @property
        def urls(self):
    
            return self.get_urls(),None,None
    
    #实例化一个单例对象
    site = StarkSite()
  • 相关阅读:
    Python 杨辉三角形
    Python 输出由星号*组成的菱形图案
    Python 计算组合数C(n,i),即从n个元素中任选i个,有多少种选法
    Python 快速判断一个数是不是素数
    判断今天是今年的第几天
    Pyhon 输入若干个成绩,求所有成绩的平均分。每输入一个成绩后询问是 否继续输入下一个成绩,回答“yes”就继续输入下一个成绩,回答“no” 就停止输入成绩
    KMP算法
    递归实现求解幂集问题
    Python 用大量小矩形来画曲线
    Python 所谓的艺术操作2(带颜色)
  • 原文地址:https://www.cnblogs.com/knighterrant/p/10294301.html
Copyright © 2011-2022 走看看