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()
stark 组件 url 二级分发的实现的更多相关文章
- stark组件之路由分发【模仿Django的admin】
一.先看下django的admin是如何进行路由分发的 1.先看下django的admin的url路径有哪些 其实很简单,假如有一个书籍表,那么每张表对应四个url,增.删.改.查 查看的url ht ...
- CRM项目之stark组件
. stark也是一个app(用startapp stark创建),目标时把这个做成一个可以拔插的组件 . setting文件下INSTALLED_APPS 路径要配置好(app的注册) . 写好si ...
- stark组件之创建
stark组件之需求 仿照Django中的admin , 开发了自己的stark组件,实现类似数据库客户端的功能,对数据进行增删改查 . stark之创建 1.在项目中 创建stark应用,app01 ...
- Django之stark组件1
stark组件 stark组件是根据Django admin为原型写的一个组件,能够让我们告别增删改查.stark组件是可插拔试的组件, 移植性强,而且只用配置文件就能够得到想要的数据 一.stark ...
- 模拟Django的admin自定义stark组件
1.新建Django项目--新建app:app01和stark--在settings中配置app和数据库--在models.py中新建模型表--完成数据库迁移 2.在stark下的apps.py中: ...
- stark组件(2):提取公共视图函数、URL分发和设置别名
效果图: Handler类里处理的增删改查.路由分发.给URL设置别名等包括以后还要添加的很多功能,每一个数据库的类都需要,所以我们要把Handler提取成一个基类.提取成基类后,每一个数据表都可以继 ...
- stark组件配置,二层URL
1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # ...
- 7 stark组件介绍、配置、2层url
1.django的admin配置 model.py from django.db import models # Create your models here. class UserInfo(mod ...
- url分发(二级分发)
from django.shortcuts import HttpResponsedef test(request): return HttpResponse('test') from django. ...
随机推荐
- Flask学习【第10篇】:自定义Form组件
wtforms源码流程 实例化流程分析 1 # 源码流程 2 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...
- git用法-打补丁【转】
本文转载自:https://www.cnblogs.com/yandufeng/p/5580765.html 1. git cherry-pick 作用:从一个branch上选择一个commit,添加 ...
- 再谈fedora下的音乐和视频播放器的安装
rpm包就相当于windows下的exe,已经是编译后的二进制代码,可以使用rpm命令或dnf install ???.rpm来安装 lnux下软件的安装跟windows不同, 后者要到处去找, 要做 ...
- Java lambda例子
简单数据类型int,跟Integer在lambda中的使用还不一样,有区别 code: package com.qhong.lambda.testDemo; import java.util.Arra ...
- Win32汇编学习(3):简单的窗口
这次我们将写一个 Windows 程序,它会在桌面显示一个标准的窗口,以此根据代码来学习如何创建一个简单的窗口. 理论: Windows 程序中,在写图形用户界面时需要调用大量的标准 Windows ...
- C语言 字符串大小写转换 自定义函数
#include <stdio.h>#include <stdlib.h>#include <string.h> char * strtolower(char * ...
- Java程序运行机制及开发环境
Java既是编译型语言,又是解释型语言 java源文件首先需要通过javac编译生成后缀名为.class的字节码文件(与平台无关,只面向JVM),然后使用Java虚拟机将字节码解释成特定平台上的机器码 ...
- (转)PaperWeekly 第二十二期---Image Caption任务综述
本文转自:http://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=2247484014&idx=1&sn=4a053986f5 ...
- Unity3D学习笔记(二十九):AssetBundle
AssetBundle 什么是AssetBundle? AssetBundle是把一些资源文件或场景文件,以某种方式保存在一个文件中.一个AssetBundle可以包含模型.材质.图片或场景等.但是A ...
- Java基础 【类之间的关系】
在Java与其他面向对象设计语言中,类之间常见的关系有6种 分别是: 依赖.关联.聚合.组合.继承.实现,他们的耦合度依次增强. 其中,关联.聚合.组合关系仅仅是在语义上有所区别,所谓语义就是指上下 ...