模拟 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()

stark 组件 url 二级分发的实现的更多相关文章

  1. stark组件之路由分发【模仿Django的admin】

    一.先看下django的admin是如何进行路由分发的 1.先看下django的admin的url路径有哪些 其实很简单,假如有一个书籍表,那么每张表对应四个url,增.删.改.查 查看的url ht ...

  2. CRM项目之stark组件

    . stark也是一个app(用startapp stark创建),目标时把这个做成一个可以拔插的组件 . setting文件下INSTALLED_APPS 路径要配置好(app的注册) . 写好si ...

  3. stark组件之创建

    stark组件之需求 仿照Django中的admin , 开发了自己的stark组件,实现类似数据库客户端的功能,对数据进行增删改查 . stark之创建 1.在项目中 创建stark应用,app01 ...

  4. Django之stark组件1

    stark组件 stark组件是根据Django admin为原型写的一个组件,能够让我们告别增删改查.stark组件是可插拔试的组件, 移植性强,而且只用配置文件就能够得到想要的数据 一.stark ...

  5. 模拟Django的admin自定义stark组件

    1.新建Django项目--新建app:app01和stark--在settings中配置app和数据库--在models.py中新建模型表--完成数据库迁移 2.在stark下的apps.py中: ...

  6. stark组件(2):提取公共视图函数、URL分发和设置别名

    效果图: Handler类里处理的增删改查.路由分发.给URL设置别名等包括以后还要添加的很多功能,每一个数据库的类都需要,所以我们要把Handler提取成一个基类.提取成基类后,每一个数据表都可以继 ...

  7. stark组件配置,二层URL

    1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # ...

  8. 7 stark组件介绍、配置、2层url

    1.django的admin配置 model.py from django.db import models # Create your models here. class UserInfo(mod ...

  9. url分发(二级分发)

    from django.shortcuts import HttpResponsedef test(request): return HttpResponse('test') from django. ...

随机推荐

  1. (转)Jenkins持续集成

    (二期)14.持续集成工具jenkins [课程14]持续集...概念.xmind0.6MB [课程14]持续集成...kins.xmind43.3KB [课程14预习]持续...kins.xmind ...

  2. Kubernetes之总体了解

    Kubernetes:架构.基本概念.用于总体了解 Kubernetes系列之介绍篇:优势.用途 Kubernetes核心概念总结

  3. OpenLayers中的球面墨卡托投影

    最近看OpenLayers,研究到地图投影时找到官方的文档,就翻译了一下,由于英文能力差,翻译不好的地方,请看原文 原文地址:http://docs.openlayers.org/library/sp ...

  4. 在ETH交易区块链里查看北大的那封信

    本文仅限于科普编码知识使用,随便举的例子不代表本人立场. 欢迎在其他网站传播,但转载不得标注来源及作者. 1.随便打开一个ETH区块链浏览网站,比如:https://www.etherchain.or ...

  5. 【SQLite】可视化工具SQLite studio

    SQLite数据库的特性 特点: 1.轻量级2.独立性,没有依赖,无需安装3.隔离性 全部在一个文件夹系统4.跨平台 支持众多操作系统5.多语言接口 支持众多编程语言6.安全性 事物,通过独占性和共享 ...

  6. Python缩进与if语句 空格的魅力

    缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例.if后面跟随条件,如果条件成立,则执行归属于if的一个代码块. 先看C语言的表达方式(注意,这是C,不是Python! ...

  7. django 消息框架 message

    在网页应用中,我们经常需要在处理完表单或其它类型的用户输入后,显示一个通知信息给用户. 对于这个需求,Django提供了基于Cookie或者会话的消息框架messages,无论是匿名用户还是认证的用户 ...

  8. Java中有多个异常, 如何确定捕获顺序(多个catch),先从上到下执行,判断异常的大小,如果包含捕到异常,就进入这个catch,后面的就不再执行

    Java中异常的捕获顺序(多个catch)( Java代码 import java.io.IOException; public class ExceptionTryCatchTest { publi ...

  9. ButterKnife RadioGroup选择事件

    ButterKnife 的点击事件都很清晰,在使用RadioGroup控件时的方法: <!-- 定义一组单选框 --> <RadioGroup android:id="@+ ...

  10. HTML 标记 3 —— 框架

    <frameset cols="80,*" frameborder="no" border="0" framespacing=&quo ...