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()    就可以了

原文地址:https://www.cnblogs.com/chengege/p/10733110.html

时间: 2024-08-30 16:20:16

stark组件开发之提取公共视图函数的相关文章

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

添加: 需求: 根据用户的权限, 决定是否,有添加按钮.  通过配置进行定制,预留钩子进行权限的判断. class StartHandler(object): has_add_btn = True # 指定配置,默认显示. 用户在子类中,自定制是否显示 def get_add_btn(self): '''预留钩子,子类中重写该方法. 根据权限的判断是否显示添加按钮''' if self.has_add_btn: return "<a class='btn btn-primary'>添

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

编辑功能.和添加一样! 唯一不同的就是, 需要编辑一个指定的  记录.这就需要,在列表页面, 渲染编辑的时候,添加一个 id 值: def memory_url(self, get_url_name, *args, **kwargs): '''用于反向生成url, 并且携带,get请求的参数,跳转到下一个网页''' name = "%s:%s" % (self.site.namespace, get_url_name) base_url = reverse(name, args=arg

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

页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class="panel panel-default"> <div class="panel-heading"> <i class="fa fa-filter" aria-hidden="true"></i

stark组件配置,二层URL

1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # Create your models here. class UserInfo(models.Model): name=models.CharField(max_length=32) age=models.IntegerField() def __str__(self): return self.

Django——stark组件

stark组件是仿照django的admin模块开发的一套组件,它的作用是在网页上对注册的数据表进行增删改查操作. 一.配置 1.创建stark应用,在settings.py中注册stark应用 stark APP专门用于存放自定义组件的核心代码. manage.py@stark_demo > startapp stark 在settings.py文件注册stark: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth'

talend自定义组件开发以及实现原理简介

talend open studio(TOS)有自定义组件开发模块,默认视图中可能不会显示,需要在Windows-perspective-Component Designer中打开. 第一次进入到component开发界面中是不能新建component项目或者打开component的,需要先在TOS中设置一下: 1.修改Windows-preferences-Talend-Components中的User component folder,指定一个文件夹作为自定义组件存放的地址,重启TOS之后该

组件开发方案

npm组件化开发的背景 随着技术的发展,开发的复杂度也越来越高,传统开发模式总是存在着==开发效率低,维护成本高==等的弊端.(界面开发太多,风格样式随时都可能调整,如果要调整,可能所有的项目都需要调整,牵一发而动全身) 项目越来越多,针对项目进度以及时间要求==每个人对项目样式的支持度==不是很高,需要一个统一的模式进行管理,提升开发人员的工作效率以及减少bug的产生,让开发人员能够更好地投入到业务开发中,发现组件化开发非常必要 组件化开发的优点.缺点 前端的组件化开发,可以很大程度上==降低

crm 使用stark组件

# Create your models here. from django.db import models class Department(models.Model): """ 部门表 市场部 1000 销售 1001 """ title = models.CharField(verbose_name='部门名称', max_length=16) code = models.IntegerField(verbose_name='部门编号',

CRM【第二篇】: stark组件

介绍: stark组件,是一个帮助开发者快速实现数据库表的增删改查+的组件.目标: 10s 中完成一张表的增删改查. 前戏: django项目启动时,自定义执行某个py文件. django启动时,且在读取项目中 路由加载 之前执行某个py文件. 在任意app的apps.py中的Config类中定义ready方法,并调用autodiscover_modules from django.apps import AppConfig from django.utils.module_loading im