模拟 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. upc组队赛1 流连人间的苏苏

    流连人间的苏苏 题目描述 苏苏在做红尘仙的任务时,发现坐落于风景秀丽.四季如春的昆明市的云南中医学院. 没过多久,苏苏就喜欢上了这个学校.以致于苏苏忘了回涂山的时间,现在她只剩下d天的时间待在云南中医 ...

  2. How to Use GNOME Shell Extensions

    如果没有安装Tweaks请先安装,命令如下: sudo apt install gnome-tweak-tool 1. Use gnome-shell-extensions package [easi ...

  3. ubuntu upgrade

    升级命令 虽然 apt-get 经常被人诟病,但实际上它还是个挺好用的软件包管理器.在 Ubuntu 14.04 以后的系统中,apt-get 相关的升级更新命令有四个: apt-get update ...

  4. POJ 3041 Asteroids(最小点覆盖)题解

    题意:n*n的网格中有k个点,开一枪能摧毁一行或一列的所有点,问最少开几枪 思路:我们把网格看成两个集合,行集合和列集合,如果有点x,y那么就连接x->y,所以我们只要做最小点覆盖就好了. 参考 ...

  5. windows下使用gvim不支持python3.6问题解决

    在用户目录下C:\Users\Administrator\新建vim配置文件夹vimfiles,然后该文件下建立一个文件vimrc vimrc内容: set pythonthreedll=python ...

  6. 【ContextLoaderListener】Web项目启动报错java.lang.ClassNotFoundException: ContextLoaderListener

    错误原因: 进入到tomcat的部署路径.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\下检查了一下,发现工程部署后在WE ...

  7. P3605 [USACO17JAN]Promotion Counting晋升者计数

    思路 线段树合并的板子.. 和子节点合并之后在值域线段树上查询即可 代码 #include <cstdio> #include <algorithm> #include < ...

  8. Nginx配置示例

    server {listen 6080;server_name local.boheadmin; location / {proxy_pass http://127.0.0.1:8087;} loca ...

  9. Jupyter Notebook主题字体设置及自动代码补全

    Jupyter Notebook用久了就离不开了,然而自带的主题真的不忍直视.为了视力着想,为了自己看起来舒服,于是折腾了一番..在github上发现了一个jupyter-themes工具,可以通过p ...

  10. SpringBoot war包部署到Tomcat服务器

    (1)pom.xml文件修改<packaging>war</packaging>,默认是jar包,<build>节点中增加<finalName>spri ...