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 = [] ...
随机推荐
- 在项目中导入import javax.servlet 出错解决办法
我们有时会把别人的项目copy到自己这里进行二次开发或者参考学习,有的时候会发生下图的错误,即eclipse项目里我们导入的项目里提示HttpServletRequest 不能引用,会伴随头疼的小红叉 ...
- Response.Redirect 打开新窗口的两种方法
一般情况下,Response.Redirect 方法是在服务器端进行转向,因此,除非使用 Response.Write("<script>window.location='htt ...
- 创建有输出参数的存储过程并在c#中实现DataGridView分页功能
不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...
- linux系统的安全小知识
最近安装linux虚拟机,出了几个小问题:1. 只有root用户 2.ftp连接不上 3.ssh连接虚拟机如何免密 1.创建用户 useradd –d /usr/sam -m sam 创建用 ...
- GreenDao 使用知识小y
//关于 group by 的实现//--------------------XXXDao.queryBuilder().where(new WhereCondition.StringConditio ...
- oracle数据库,表被锁,如何解锁?
4.批量解锁declare cursor mycur isselect b.sid,b.serial# from v$locked_object a,v$session bwhere a.sessio ...
- 正则表达式---01 js篇
本文主要针对js中正则表达式的实践操作,来让大家对正则表达式有一个入门清晰的了解. 正则表达式推荐学习网址:http://www.runoob.com/regexp/regexp-tutorial.h ...
- 腾讯云服务器CVM购买详细过程 选择我们需要的腾讯云服务器
腾讯云服务商有云服务器.云数据库.CDN.云存储等产品,其中较多的用户会选择腾讯云服务器,因为用途比较广泛,比如用来软件的运行以及网站建设,如今一般都是用云服务器,而不是用虚拟主机,毕竟虚拟主机的性价 ...
- linux 命令——32 gzip(转)
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以用 ...
- SAP成都研究院马洪波:提升学习力,增强竞争力,收获一生乐趣
马洪波是SAP成都研究院CEC开发团队三大巨头之一.关于他的背景介绍,参考我以前的公众号文章:SAP成都研究院CEC团队三巨头之一:M君的文章预告. 其实早在2007年,互联网上已经有介绍马洪波的文章 ...