stark组件开发之提取公共视图函数
路由问题, 已经解决! 然后就是视图函数的问题了:
不想重复写的解决途径就是, python 类的继承了!
写一个基类, 基类定义 增删改查。 然后其他的,全部去继承他!
from django.urls import path, re_path
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render, redirect, reverse
from app01 import models # 基类的,最初定义。简单一些!
class StartHandler(object): def __init__(self, model_class):
self.model_class = model_class def check_list_view(self, request): data_list = self.model_class.objects.all()
return render(request, "changelist.html", locals()) def add_view(self, request): return HttpResponse("添加页面") def change_view(self, request):
return HttpResponse("编辑页面") def delete_view(self, request): return HttpResponse("删除页面") class StartSite(object):
def __init__(self):
self._registry = []
self.app_name = "stark"
self.namespace = "stark" def register(self, model_class, handler_class):
'''
:param model_class: 是model中数据库相关类。 接受一个类而不是对象
:param handler_class: 处理请求的视图函数,所在的类
:return:
''' self._registry.append({'model_class': model_class, "handler": handler_class(model_class)})
'''
[
{'model_class':models.Depart, "handler":DepartHandler(models.Depart)},
{'model_class':models.UserInfo, "handler":UserInfoHandler(models.UserInfo)},
{'model_class':models.Host, "handler":HostHandler(models.Host)},
]
''' def get_urls(self):
partterns = []
for item in self._registry:
model_class = item["model_class"]
handler = item["handler"] app_label = model_class._meta.app_label # 获取当前model_class所在的app名字
model_name = model_class._meta.model_name # 获取当前model_class的类名,小写 partterns.append(re_path(r"%s/%s/list/$" % (app_label, model_name), handler.check_list_view))
partterns.append(re_path(r"%s/%s/add/$" % (app_label, model_name), handler.add_view))
partterns.append(re_path(r"%s/%s/change/(\d+)/$" % (app_label, model_name), handler.change_view))
partterns.append(re_path(r"%s/%s/del/$(\d+)/$" % (app_label, model_name), handler.delete_view))
return partterns @property
def urls(self):
'''模拟include的返回值'''
return (self.get_urls(), self.app_name, self.namespace) site = StartSite()
start\start.py
app01\start.py
from stark.servers.start_v1 import site,StartHandler
from django.http import HttpResponse, JsonResponse
from app01 import models class DepartHandler(StartHandler):
'''定义增删改查'''
pass
class UserInfoHandler(StartHandler):
'''定义增删改查'''
pass site.register(models.Depart, DepartHandler)
site.register(models.UserInfo, UserInfoHandler)
app02\start.py
from stark.servers.start_v1 import site, StartHandler
from app02 import models class HostHandler(StartHandler):
'''定义增删改查'''
pass site.register(models.Host, HostHandler)
这样就可以了! 如果以后还想增加表的时候。 直接增加就行了!
定义一个 Handler 类。 继承StartHandler 。 然后 将model类, 和 刚刚为这张表定义的,类。 传给register() 就可以了
stark组件开发之提取公共视图函数的更多相关文章
- stark组件(2):提取公共视图函数、URL分发和设置别名
效果图: Handler类里处理的增删改查.路由分发.给URL设置别名等包括以后还要添加的很多功能,每一个数据库的类都需要,所以我们要把Handler提取成一个基类.提取成基类后,每一个数据表都可以继 ...
- stark组件开发之列表页面自定义函数扩展
对于展示页面, 可能需要显示一些. 数据库中,没有的字段. 比如, 删除按钮, 编辑按钮. 这个数据库,是没有的. 所以,可能就需要, 添加一个这个东西. 比如我在渲染的时候, 给他添加两个函数进 ...
- stark组件开发之列表页面定制列
先看一张页面展示的效果图: 看一看我的 model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...
- stark组件开发之添加功能实现
添加功能,还是使用, form 组件来完成! 并且 完成添加之后,需要保留原搜索条件. def memory_url(self): '''用于反向生成url, 并且携带,get请求的参数,跳转到下一 ...
- stark组件开发之列表页面应用示例
已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把! 应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的 <a href="/ ...
- stark组件开发之组合搜索页面效果和 URL
页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...
- stark组件开发之组合搜索实现思路
- 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q() 函数. 来实现. 搜索是一个大的问题点. - 要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...
- stark组件开发之编辑功能实现
编辑功能.和添加一样! 唯一不同的就是, 需要编辑一个指定的 记录.这就需要,在列表页面, 渲染编辑的时候,添加一个 id 值: class UserInfoHandler(StartHandler ...
- stark组件开发之添加按钮显示和URL
添加: 需求: 根据用户的权限, 决定是否,有添加按钮. 通过配置进行定制,预留钩子进行权限的判断. class StartHandler(object): .................... ...
随机推荐
- Java学习01 (第一遍)
java se - 桌面 java ee - 网页 Jdk :Jre 区别Jdk-开发环境必要Jre-运行环境需要Jdk包含Jre,安装完Jdk就可以了 Javac Demo1.java-Javac ...
- shiro 权限 URL 配置细节
- TensorFlow saved_model 模块
最近在学tensorflow serving 模块,一直对接口不了解,后面看到这个文章就豁然开朗了, 主要的困难在于 tf.saved_model.builder.SavedModelBuilde ...
- ssh架构之hibernate(一)简单使用hibernate完成CRUD
1.Hibernate简介 Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,h ...
- springboot-day02-整合mybatis与简单使用
前言:该文章是紧接上一篇文章springboot-day01-引入如何读取配置文件以及helloWorld 1.springboot整合mybatis 1.添加jar包依赖 <?xml vers ...
- 2.7、CDH 搭建Hadoop在安装(使用向导设置群集)
步骤7:使用向导设置群集 完成“ 群集安装”向导后,“ 群集设置”向导将自动启动.以下部分将指导您完成向导的每个页面: 选择服务 分配角色 设置数据库 查看更改 首次运行命令 恭喜! 选择服务 “ 选 ...
- Gamma Correction
[Gamma Correction] 磁盘上存储的纹理可分为Linear Texture.Gamma Texture. sRGB sampling allows the Unity Editor to ...
- Flux architecture
[Flux architecture] Flux is a pattern for managing data flow in your application. The most important ...
- python 之面向对象
继承粗体文本 标签(空格分隔): 继承 什么是继承: 继承是指类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代买重用问题,继承是一种创建新类的方式,在py ...
- frame嵌套页面元素的定位
这里当出现页面嵌套的时候怎么定位?frame就是对于嵌套页面的定位,今天具体说一下 前期准备工作:先编写一个HTML网页,带有嵌套的,方便我们在案例中使用按照如下截图的代码编写就好了,然后保存为HTM ...