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. ...
随机推荐
- webpack 自动发现 entry 的配置和引用方式
假定我们的项目目录为如下的样子: - root/ - assets/ - app/ - global.js - index/ - index.js - auth/ - login.js - regis ...
- Java中关键字static的使用与作用
1.static的意义 static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和 ...
- HTML+CSS基础课程二
1.border为系统加边框<style type="text/css"> table tr td,th{border:1px solid #000;} </st ...
- ios instancetype 和 id 的异同
1.0 相同点:都可以作为方法的返回类型 2.0 不同点: a.instancetype 可以返回和方法所在类相同类型的对象 id 只能返回未知类型的对象 b. instancetype 只能作为 ...
- 吴裕雄 python 机器学习-KNN算法(1)
import numpy as np import operator as op from os import listdir def classify0(inX, dataSet, labels, ...
- python 2.X 和 3.X 的区别汇总
python 2.x python 3.x print() 或者 print “abc”都可以 ...
- 终止执行js的方法
(一)在function里面 (1)return;(2)return false; (二)非function方法里面 alert("before error.");throw Sy ...
- linux配置虚拟域名
linux环境下面配置虚拟主机域名 第一步:在root目录下面(即根目录)ls(查看文件)cd进入etc目录find hosts文件vi hosts 打开hosts文件并进行编辑在打开的文件最下面添加 ...
- xlwt使用
xlwt引入xlwt,import xlwt 新建工作簿,xlsx = xlwt.Workbook( encoding="utf-8" ),参数:设置编码为utf-8 添加工作表, ...
- Physical (Raw) Versus Logical Backups
[Physical (Raw) Versus Logical Backups] Physical backups consist of raw copies of the directories an ...