stark组件开发之URL别名的设置
from django.urls import re_path
from stark.servers.start_v1 import site, StartHandler
from django.http import HttpResponse, JsonResponse
from app01 import models class DepartHandler(StartHandler):
'''定义增删改查''' def extra_url(self):
return [
re_path("detail/(\d+)/$", self.detail_view)
] def detail_view(self):
return HttpResponse("详情页") site.register(models.Depart) # 这个没有后缀
site.register(models.Depart,prev="private") # 这个有后缀
设置别名:
def get_urls(self):
# 获取每个model_class类。所在的app_name 和 他自己的 表名称model_name
app_label, model_name = self.model_class._meta.app_label, self.model_class._meta.model_name
partterns = [
re_path(r"list/$", self.check_list_view, name="%s_%s_list" % (app_label, model_name)), # name="app名称_表名称_list"
re_path(r"add/$", self.add_view, name="%s_%s_add" % (app_label, model_name)),
re_path(r"change/(\d+)/$", self.change_view, name="%s_%s_change" % (app_label, model_name)),
re_path(r"del/$(\d+)/$", self.delete_view, name="%s_%s_del" % (app_label, model_name)),
]
partterns.extend(self.extra_url())
return partterns

这里还有一个问题,就是 private 这个后缀。 因为这个是用户自己制定的。
可以看出 指定了后缀的,和没指定后缀的。 别名竟然是一样的。 所以还需要更改一下。代码逻辑。
首先肯定需要的是,prev 这个参数。 必须要能在 StartHandler 这个里面能够接收到,才可以用于做判断。
所以在传递参数阶段, 就需要把这个参数传递进来。
这里传的时候,是每一个 Handler 类!! 他们共同继承的都是 StartHandler。所以这个基类初始化函数中。 增加一个prev参数就好:

看效果还不错!
优化一下:
class StartHandler(object):
def __init__(self, model_class, prve):
self.model_class = model_class
self.prev = prve
def check_list_view(self, request):
'''
列表查看页面
:param request:
:return:
'''
data_list = self.model_class.objects.all()
return render(request, "changelist.html", locals())
def add_view(self, request):
'''
添加页面
:param request:
:return:
'''
return HttpResponse("添加页面")
def change_view(self, request):
'''
编辑页面
:param request:
:return:
'''
return HttpResponse("编辑页面")
def delete_view(self, request):
'''
删除页面
:param request:
:return:
'''
return HttpResponse("删除页面")
def get_url_name(self, param):
'''
判断是否有后缀 prev。 进行拼接URL的别名
:param param: 页面后缀(list, add, change, del)
:return:
'''
app_label, model_name = self.model_class._meta.app_label, self.model_class._meta.model_name
if self.prev:
return "%s_%s_%s_%s" % (app_label, model_name, self.prev, param)
return "%s_%s_%s" % (app_label, model_name, param)
@property
def get_list_url_name(self):
'''获取列表页面URL 的name'''
return self.get_url_name("list")
@property
def get_add_url_name(self):
'''获取添加页面URL 的name'''
return self.get_url_name("add")
@property
def get_change_url_name(self):
'''获取修改页面URL 的name'''
return self.get_url_name("change")
@property
def get_del_url_name(self):
'''获取删除页面URL 的name'''
return self.get_url_name("del")
def get_urls(self):
# 获取每个model_class类。所在的app_name 和 他自己的 表名称model_name
app_label, model_name = self.model_class._meta.app_label, self.model_class._meta.model_name
partterns = [
re_path(r"list/$", self.check_list_view, name=self.get_list_url_name),
re_path(r"add/$", self.add_view, name=self.get_add_url_name),
re_path(r"change/(\d+)/$", self.change_view, name=self.get_change_url_name),
re_path(r"del/$(\d+)/$", self.delete_view, name=self.get_del_url_name),
]
partterns.extend(self.extra_url())
return partterns
def extra_url(self):
return []
StarkHandler
stark组件开发之URL别名的设置的更多相关文章
- stark组件开发之URL分发和默认Handler
为register 函数添加一个,prev参数,默认None ,用于可以让用户自己指定前缀. def register(self, model_class, handler_class=None, p ...
- iOS开发之APP推送设置WIFI
在iOS开发过程中,有时需要连接网络.当访问请求,检测到网络不可用时,需要提示用户手动进行设置网络并告知用户操作路径设置可用的网络. 只需一行代码即可实现: - (void)viewDidLoad { ...
- iOS开发之AppIcon及LaunchScreen设置
一.AppIcon设置 具体设置步骤如下图: 二.LaunchScreen设置与停留时间设置 具体设置步骤如下图: 通过程序可以增加背景的停留时间:
- iOS开发之iOS程序偏好设置(Settings Bundle)的使用
目录[-] 1.添加设置项 2.设置的控件 3.编辑设置项的文件 4.在程序中获取Settings 和写入Settings 添加UI 5.实现读取设置和保存代码 在Android手机上, 在某个程序里 ...
- 【读书笔记】iOS-iOS开发之iOS程序偏好设置(Settings Bundle)的使用
在Android手机上, 在某个程序里,通过按Menu键,一般都会打开这个程序的设置,而在iOS里,系统提供了一个很好的保存程序设置的机制.就是使用Settings Bundle. 在按了HOME键的 ...
- dt二次开发之-url伪静态的自定义
dt内核的方便性在于代码内核完全开源,都可以根据自身需要进行优化整改,个人在这段时间的深入研究,发现这套内核的方便性,今天继续给大家分享下DT的url伪静态如何自定义函数. url自定义文件是在api ...
- IOS开发之UILabel动态高度设置方法
项目中有这样的需求,要显示一本书的概述,默认显示2行,点击展开按钮,显示全部,点击收回,有显示2行. 开始的时候按钮事件中,可能写的是这样一段代码: if (isExpand) { [lblBrief ...
- python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)
一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object): pass _registry = { Foo:123 } print(_registry) 执行输出: {&l ...
- Android开发之旅5:应用程序基础及组件
引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...
随机推荐
- 如何查看虚拟机的ip地址,以及如何给虚拟机配置静态ip
1 在命令行上敲ifconfig 如下图: 通过inet addr : 192.168.25.129就是你的虚拟机当前的ip 2. 我们一般在局域网内是通过dhcp协议向网关发送ip请求,因此获取的i ...
- UnityHub破解
1.退出UnityHub,安装好nodejs执行以下命令 npm install -g asar 2.打开UnityHub安装目录如 C:\Program Files\Unity Hub\resour ...
- maven中scope标签详解
前言 最近在做itoo的pom优化工作,发现对于maven依赖管理中的scope标签还是有不明白的地方,所以今天就来总结一下这方面的知识,scope在maven的依赖管理中主要负责项目的部署 mave ...
- Stephen Hawking Taught Us a Lot About How to Live
勇气.好奇心.幽默感,那些霍金教给我们的事Stephen Hawking Taught Us a Lot About How to LiveStephen Hawking, the English c ...
- python 学习笔记之@property
今天学习python类看到 @property 的用法觉得很新奇,就自己尝试了很久,刚开始不明白,后来终于明白了点 其实总结一句话就是, @property 把类中的方法调用方式改变成当成属性属性调用 ...
- Delphi实现图像文本旋转特效完整代码
Delphi实现图像文本旋转特效完整代码,本程序利用的控件主要是Panel 控件.Image 控件.Edit 控件.Label 控件和Button 控件.本程序的关键是利用Delphi 的bmp_ro ...
- 在前台页面写java代码,导入java的包
- endl
endl英语意思是end of line,即一行输出结束,然后输出下一行. endl与cout搭配使用,意思是输出结束.
- HTTP状态码汇总
- Linux系统下面crontab选择默认编译器
crontab修改默认编辑器 crontab默认编辑器为nano. 修改crontab默认编辑器为vi或者其他的编辑器. 法一: export EDITOR="/usr/bin/vim&qu ...