stark组件(2):提取公共视图函数、URL分发和设置别名
效果图:



Handler类里处理的增删改查、路由分发、给URL设置别名等包括以后还要添加的很多功能,每一个数据库的类都需要,所以我们要把Handler提取成一个基类。提取成基类后,每一个数据表都可以继承这个基类,然后有需要的话可以在这个基类的基础上重写函数,定制自己的方法。
Handler下新增函数get_urls是为了解耦Stark类下的get_urls
一、stark组件
stark/service/core_func.py
from django.urls import re_path
from django.shortcuts import HttpResponse, render class StarkHandler(object):
def __init__(self, model_class, prev=None):
self.model_class = model_class
self.prev = prev def list_view(self, request):
"""
列表页面
:param request:
:return:
"""
data_list = self.model_class.objects.all()
return render(request, 'stark/data_list.html', {'data_list': data_list}) def add_view(self, request):
"""
添加页面
:param request:
:return:
"""
return HttpResponse('添加页面') def edit_view(self, request, pk):
"""
编辑页面
:param request:
:return:
"""
return HttpResponse('编辑页面') def delete_view(self, request, pk):
"""
删除页面
:param request:
:param pk:
:return:
"""
return HttpResponse('删除页面') def get_urls(self):
app_name, model_name = self.model_class._meta.app_label, self.model_class._meta.model_name
if self.prev:
patterns = [
re_path(r'^list/$', self.list_view, name="%s_%s_%s_list" % (app_name, model_name, self.prev)),
re_path(r'^add/$', self.add_view, name="%s_%s_%s_add" % (app_name, model_name, self.prev)),
re_path(r'^edit/(\d+)/$', self.edit_view, name="%s_%s_%s_edit" % (app_name, model_name, self.prev)),
re_path(r'^delete/(\d+)/$', self.delete_view,
name="%s_%s_%s_delete" % (app_name, model_name, self.prev)),
]
else:
patterns = [
re_path(r'^list/$', self.list_view, name="%s_%s_list" % (app_name, model_name,)),
re_path(r'^add/$', self.add_view, name="%s_%s_add" % (app_name, model_name,)),
re_path(r'^edit/(\d+)/$', self.edit_view, name="%s_%s_edit" % (app_name, model_name,)),
re_path(r'^delete/(\d+)/$', self.delete_view,
name="%s_%s_delete" % (app_name, model_name,)),
]
patterns.extend(self.extra_urls())
return patterns def extra_urls(self):
return [] class StarkSite(object):
def __init__(self):
self._registry = []
self.app_name = 'stark'
self.namespace = 'stark' def register(self, model_class, handler_class=None, prev=None):
"""
:param model_class: 是models中的数据库表对应的类。
:param handler_class: 处理请求的视图函数所在的类
:param prev: 生成URL的前缀
:return:
""" if not handler_class:
handler_class = StarkHandler
self._registry.append({'model_class': model_class, 'handler': handler_class(model_class, prev), 'prev': prev}) def get_urls(self):
patterns = []
for item in self._registry:
model_class = item['model_class']
handler = item['handler']
prev = item['prev']
app_name, model_name = model_class._meta.app_label, model_class._meta.model_name
if prev:
patterns.append(
re_path(r'^%s/%s/%s/' % (app_name, model_name, prev,), (handler.get_urls(), None, None)))
else:
patterns.append(re_path(r'^%s/%s/' % (app_name, model_name,), (handler.get_urls(), None, None))) return patterns @property
def urls(self):
return self.get_urls(), self.app_name, self.namespace site = StarkSite()
二、业务处理
web/stark.py
from django.urls import re_path from django.shortcuts import HttpResponse
from stark.service.core_func import site, StarkHandler from web import models class DepartmentHandler(StarkHandler):
def extra_urls(self):
"""
增加额外的URL
:return:
"""
# 给部门增加了详情页:/stark/web/department/private/detail/1
return [
re_path(r'^detail/(\d+)', self.detail_view)
] def detail_view(self, request, pk):
return HttpResponse('详细页面') class UserInfoHandler(StarkHandler):
def get_urls(self):
"""
修改url
:return:
"""
# 用户信息只有list和add的url
patterns = [
re_path(r'^list/$', self.list_view),
re_path(r'^add/$', self.add_view),
] return patterns site.register(models.Department, DepartmentHandler, prev='private') # 给部门的url增加了前缀:/stark/web/department/private/
site.register(models.UserInfo, UserInfoHandler)
stark组件(2):提取公共视图函数、URL分发和设置别名的更多相关文章
- stark组件开发之提取公共视图函数
路由问题, 已经解决! 然后就是视图函数的问题了: 不想重复写的解决途径就是, python 类的继承了! 写一个基类, 基类定义 增删改查. 然后其他的,全部去继承他! from django. ...
- 12 stark组件之pop,按钮,url,页面
1.Window open() 方法 http://www.runoob.com/jsref/met-win-open.html 效果图 2.admin的pop添加按钮 3.stark之pop功能 ...
- stark组件配置,二层URL
1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # ...
- 01_Django-介绍-项目结构-URL和视图函数
01_Django-介绍-项目结构-URL和视图函数 视频:https://www.bilibili.com/video/BV1vK4y1o7jH 博客:https://blog.csdn.net/c ...
- stark组件之创建
stark组件之需求 仿照Django中的admin , 开发了自己的stark组件,实现类似数据库客户端的功能,对数据进行增删改查 . stark之创建 1.在项目中 创建stark应用,app01 ...
- django系列3.3--view视图函数, render, reverse(未完待续)
1.view视图函数 urls分发之后所用到的处理函数 2.render 用于渲染页面 在views.py中常用 from django.shortcuts import render, HttpRe ...
- Stark组件 (一)
Stark组件构建 1.启动所有app下的stark.py文件,的配置实现步骤 1.创建一个Django项目crm,并创建 app1 ,app2, stark 三个app 2.在crm 项目的set ...
- stark组件之处理函数动态url构造(五)
在这个组件中有内置的4个处理函数,它们都有自己对应的url,那么它们的url是怎么构造的呢? ... urlpatterns = [ re_path('list/$', self.wrapper(se ...
- stark - 4 ⇲ 视图函数
✘ list_view 处理表格(默认是显示表结构的所有字段) 1 list_display = self.get_list_display() # 4.1处理表头 header_list = [] ...
随机推荐
- KendoUI 自定义验证:
Html: <label>@LogicNameAttribute.GetLogicName(typeof(Reward).GetProperty("ExtraRewardMone ...
- js中的位运算符 ,按位操作符
按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制.十六进制或八进制数值.例如,十进制数9,用二进制表示则为1001.按 ...
- 【Java】Maven 常用命令
Maven 常用命令 mvn compile 编译,生成target文件夹,里边有classes文件夹,存放.class文件 mvn test 执行测试 mvn package 打包,在targert ...
- HTTPS与SSL(二)
CA Ca介绍 电子商务认证授权机构(CA, Certificate Authority),也称为电子商务认证中心,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系 ...
- 软件License设计
如何保护软件版权,最常用的办法就是设计一套license验证框架. 1.我们的常规需求如下: .可以限制软件只能在一台机器上使用: 目前很多软件都是一机一码的销售,软件换一台机器则不能使用,想要几台机 ...
- intelij idea相关笔记--持续更新
一.快捷键: Ctrl+F 文件内查找 Ctrl+Shift+F 全局查找 Ctrl+Shift+N 查找文件 Ctrl+Alt+← 返回上一步 Ctrl+Alt+→ 返回下一步 二.编译相关: 如果 ...
- 流媒体 6——MPEG电视
1.电视图像的数据率 1.1 ITU-R BT.601标准数据率 按照奈奎斯特(Nyquist)采样理论,模拟电视信号经过采样(把连续的时间信号变成离散的时间信号)和量化 (把连续的幅度变成离散的幅度 ...
- IOS 自定义Layer(图层)
方式1: @interface NJViewController () @end @implementation NJViewController - (void)viewDidLoad { [sup ...
- IOS UIButton常用属性
//1.添加按钮 UIButton *nameView=[UIButton buttonWithType:UIButtonTypeCustom]; //nameView.backgroundColor ...
- mongodb索引 全文索引
全文索引,也叫文本索引,平时,我们百度的搜索,比如api文档的搜索,这种全局的索引就可以使用全文索引实现 全文索引:对字符串与字符串数组创建全文可搜索对索引 使用情况:比如有一个数据集合,存储了用户的 ...