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. ...
随机推荐
- 【384】reduce归纳、map映射、filter筛选 的用法
参考:4. Map, Filter and Reduce — Python Tips 0.1 documentation 参考:Python的functools.reduce用法 Map:映射,对于列 ...
- jgGrid
jqGrid的表格加载 function GetGrid() { var selectedRowIndex = 0; var $gridTable = $("#gridTable" ...
- Ajax 学习 第一篇
http请求: 1.请求的方法或动作 2.正在请求的url 3.请求头 4.请求体 及请求正文 典型例子 get.post区别 1.get 幂等 执行一次哪怕一万次影响相同 一般用于信息获取 ...
- 设置git的http代理
如果git仓库不和本地代码之间不可以直达,这个时候就可以考虑使用git 代理的方式提交代码到git仓库了; git http代理或者https代理,配置在~/.gitconfig 文件下,可以直接编辑 ...
- GIS案例学习笔记-多边形内部缓冲区地理模型
GIS案例学习笔记-多边形内部缓冲区地理模型 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:对于多边形,建立内部缓冲区. 问题:ArcGIS缓冲工具不支持内部 ...
- 案例:Spark基于用户的协同过滤算法
https://mp.weixin.qq.com/s?__biz=MzA3MDY0NTMxOQ==&mid=2247484291&idx=1&sn=4599b4e31c2190 ...
- ADO.Net 数据库修改
数据库的修改方法和增加一样,只是把增加语句换成了修改语句,后面执行语句是相同的 首先也是需要获取并接收输入的要修改的哪个数据以及修改后的数据 代码演示: using System; using Sys ...
- apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80
说明80端口被用 终端: ps -ef|grep httpd察看占用的进程或者用netstat -lnp|grep 80 找到后kill掉,如果都不行那么再试试以下方法(试过可以) 终端输入: fi ...
- SSM框架简介及整合教程
1.Spring Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (控制反转) 和 A面向切面编程).Spring框架是个轻量级的Java E ...
- 03_java基础(六)之CRUD实现
1.简单实现 package com.day01.station.dao; /** * Created by Administrator on 2018/2/1. */ import java.sql ...