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别名的设置的更多相关文章

  1. stark组件开发之URL分发和默认Handler

    为register 函数添加一个,prev参数,默认None ,用于可以让用户自己指定前缀. def register(self, model_class, handler_class=None, p ...

  2. iOS开发之APP推送设置WIFI

    在iOS开发过程中,有时需要连接网络.当访问请求,检测到网络不可用时,需要提示用户手动进行设置网络并告知用户操作路径设置可用的网络. 只需一行代码即可实现: - (void)viewDidLoad { ...

  3. iOS开发之AppIcon及LaunchScreen设置

    一.AppIcon设置 具体设置步骤如下图: 二.LaunchScreen设置与停留时间设置 具体设置步骤如下图: 通过程序可以增加背景的停留时间:

  4. iOS开发之iOS程序偏好设置(Settings Bundle)的使用

    目录[-] 1.添加设置项 2.设置的控件 3.编辑设置项的文件 4.在程序中获取Settings 和写入Settings 添加UI 5.实现读取设置和保存代码 在Android手机上, 在某个程序里 ...

  5. 【读书笔记】iOS-iOS开发之iOS程序偏好设置(Settings Bundle)的使用

    在Android手机上, 在某个程序里,通过按Menu键,一般都会打开这个程序的设置,而在iOS里,系统提供了一个很好的保存程序设置的机制.就是使用Settings Bundle. 在按了HOME键的 ...

  6. dt二次开发之-url伪静态的自定义

    dt内核的方便性在于代码内核完全开源,都可以根据自身需要进行优化整改,个人在这段时间的深入研究,发现这套内核的方便性,今天继续给大家分享下DT的url伪静态如何自定义函数. url自定义文件是在api ...

  7. IOS开发之UILabel动态高度设置方法

    项目中有这样的需求,要显示一本书的概述,默认显示2行,点击展开按钮,显示全部,点击收回,有显示2行. 开始的时候按钮事件中,可能写的是这样一段代码: if (isExpand) { [lblBrief ...

  8. python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)

    一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object): pass _registry = { Foo:123 } print(_registry) 执行输出: {&l ...

  9. Android开发之旅5:应用程序基础及组件

    引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...

随机推荐

  1. How to Pronounce Numbers 11 – 19

    How to Pronounce Numbers 11 – 19 Share Tweet Share Tagged With: Numbers Numbers are something you’ll ...

  2. Linux基本命令(新手入门使用)

    Linux常用基本命令主要包括目录操作命令.文件操作命令.文件查看命令.磁盘管理命令.用户管理命令.系统管理命令等. 目录操作命令:cd.ls.mkdir.pwd.rmdir 文件操作命令:cp.mv ...

  3. Excel导入oracle的几种方法

    http://www.jb51.net/list/list_154_1.htm 方法一.使用SQL*Loader这个是用的较多的方法,前提必须oracle数据中目的表已经存在.大体步骤如下:1.将ex ...

  4. Android EditText 操作。。。

    EditText请求焦点三连击... editText.setFocusable(true); editText.setFocusableInTouchMode(true); editText.req ...

  5. 22.多线程.md

    目录 1.线程的创建和启动 1.1继承Thread类创建线程 1.2继承Runnable接口实现创建线程 1.3使用Callable和Future创建 2.控制线程 2.1 Thread类的join方 ...

  6. week5 03 continus loading news

    1.server-side : Rest API 2. client-side 想要持续不断的下拉获取新闻 有两种做法 一种是在UI 我们调用API 获取所有的新闻 然后在UI 拉下的时候显示新闻 其 ...

  7. javascript原型链中 this 的指向

    为了弄清楚Javascript原型链中的this指向问题,我写了个代码来测试: var d = { d: 40 }; var a = { x: 10, calculate: function (z) ...

  8. Oracle ORA-00911: 无效字符

    SQL语句后多了个分号 “ ; ”.

  9. ADO.Net 数据库修改

    数据库的修改方法和增加一样,只是把增加语句换成了修改语句,后面执行语句是相同的 首先也是需要获取并接收输入的要修改的哪个数据以及修改后的数据 代码演示: using System; using Sys ...

  10. windows 允许空密码登陆

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa  这个注册表键值下的limitblankpassworduse项 修改为0或者1