路由问题, 已经解决! 然后就是视图函数的问题了:

不想重复写的解决途径就是, 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组件开发之提取公共视图函数的更多相关文章

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

    效果图: Handler类里处理的增删改查.路由分发.给URL设置别名等包括以后还要添加的很多功能,每一个数据库的类都需要,所以我们要把Handler提取成一个基类.提取成基类后,每一个数据表都可以继 ...

  2. stark组件开发之列表页面自定义函数扩展

    对于展示页面, 可能需要显示一些. 数据库中,没有的字段. 比如, 删除按钮, 编辑按钮.  这个数据库,是没有的. 所以,可能就需要, 添加一个这个东西.  比如我在渲染的时候, 给他添加两个函数进 ...

  3. stark组件开发之列表页面定制列

    先看一张页面展示的效果图: 看一看我的  model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...

  4. stark组件开发之添加功能实现

    添加功能,还是使用, form 组件来完成!  并且 完成添加之后,需要保留原搜索条件. def memory_url(self): '''用于反向生成url, 并且携带,get请求的参数,跳转到下一 ...

  5. stark组件开发之列表页面应用示例

    已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把!  应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的  <a href="/ ...

  6. stark组件开发之组合搜索页面效果和 URL

    页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...

  7. stark组件开发之组合搜索实现思路

    - 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q()  函数. 来实现.  搜索是一个大的问题点. -  要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...

  8. stark组件开发之编辑功能实现

    编辑功能.和添加一样! 唯一不同的就是, 需要编辑一个指定的  记录.这就需要,在列表页面, 渲染编辑的时候,添加一个 id 值: class UserInfoHandler(StartHandler ...

  9. stark组件开发之添加按钮显示和URL

    添加: 需求: 根据用户的权限, 决定是否,有添加按钮.  通过配置进行定制,预留钩子进行权限的判断. class StartHandler(object): .................... ...

随机推荐

  1. SecureCRT使用本地公钥 SSH 免密码登录Linux

    其原理与Linux系统之间的SSH通道原理是一样的 下文中如果创建公钥的格式是:标准公钥和VanDyke私钥格式,需要用ssh-keygen -i -f 转换.如果是OpenSSH密钥格式可直接修改文 ...

  2. 二、消息队列之如何在C#中使用RabbitMQ(转载)

    二.消息队列之如何在C#中使用RabbitMQ 1.什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源 ...

  3. Linux删除ORACLE数据库用户失败提示ORA-01940解决方法

    操作环境 SuSE11+Oracle11gR2 问题现象 删除ORACLE数据库用户失败,提示ORA-01940: cannot drop a user that is currently conne ...

  4. 学习JS的心路历程-类型

    前言 之前学JS时候都是靠着谷狗一路跌跌撞撞的学过来,从来没有去翻过MDN的文件,导致留了许多技术债给自己. 最近有幸遇到一位前辈并开始从头学JS,前辈表示学程序不看文件是想作死自己?于是我的第一份功 ...

  5. tomcat 下配置 可 调试

    set JAVA_OPTS=-Djute.maxbuffer=2048000 set console_log=true 起始行配置 rem Ensure that any user defined C ...

  6. 弹性盒子 flexbox 元素居中

    1 .navtext{ width:800px; height:600px; border: 1px solid black; justify-content:center; align-items: ...

  7. ES5新增数组方法every()、some()、filter()、map()

    JavaScript ES5标准中新增了一些Array方法,如every().some().filter().map().它们的出现使我们能够更加便利地操作数组,但对IE9以下浏览器的兼容性比较差.下 ...

  8. Springmvc配置时间日期转换

    1.局部日期转换 @Controller public class ProductController{ @RequestMapping(value="/test/springmvc.do& ...

  9. Forms.WebBrowser与Controls.WebBrowser区别

    Forms.WebBrowser与Controls.WebBrowser区别 Forms.WebBrowser有ScrollBarsEnabled 属性,即窗口滚动条,可以设置为false即可: Co ...

  10. pta l2-7(家庭房产)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 题意:给定n个人的信息,包括其编号 ...