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

不想重复写的解决途径就是, 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. avalon2学习教程02之vm

    avalon2的vm是一个非常重要的东西,其设计原型最初脱胎于knockout.js,但到avalon1.6中,终于寻得自己的方案,更精简,更易用,更魔幻. vm是一种特殊的数据结构,看起来像普通对象 ...

  2. 封装jQuery下载文件组件

    使用jQuery导出文档文件 jQuery添加download组件 jQuery.download = function(url, data, method){ if( url && ...

  3. 【原】wow64 x86/x64 代码切换过程分析

    下面以ntdll32!ZwQueryInformationProcess API为例分析 x86代码与x64代码之间的切换过程, 32bit的test程序: step1: ntdll32!ZwQuer ...

  4. VC++ 自定义控件的建立及使用方法

    一.VC++定义自定义控件与delphi,VB有些差异. delphi,vb在 file-new-other中建立.vc++在工具栏中就有自定义控件,但必须加入控件类型. 许多书籍都在类向导中建立.我 ...

  5. redmine安装-BitNami 提供的一键安装程序

    redmine安装-BitNami 提供的一键安装程序          博客分类: REDMINE redmine安装redmine一键安装bitNami redmine  BitNami 提供re ...

  6. Zabbix监控系统配置

    1.Zabbix是一个基于WEB界面的提供分布式系统监控的企业级的开源解决方案 Zabbix能监视各种网络参数,保证服务器系统的安全稳定的运行,并提供灵活的通知机制以让SA快速定位并解决存在的各种问题 ...

  7. Mysql字段类型与合理选择

    字段类型 数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许 ...

  8. vue 巧妙的运用sass px 转 rem

    <template> <div id="app"> <!-- <img src="./assets/logo.png"> ...

  9. MySQL 5.7 使用原生JSON类型

    首先回顾一下JSON的语法规则: 数据在键值对中, 数据由逗号分隔, 花括号保存对象, 方括号保存数组. 按照最简单的形式,可以用下面的JSON表示: {"NAME": " ...

  10. node 加载逻辑

    [node 加载逻辑] require(X) from module at path Y . If X is a core module, a. return the core module b. S ...