CRM【第二篇】stark组件【stark.zip】

介绍:stark组件,是一个帮助开发者快速实现数据库表的增删改查
目标:10s 完成一张表的增删改查

stark组件提供的接口说明:

    list_display = [display_checkbox,]#自定义展示的列 /display_checkbox多选框
    per_page_count = 10 #分页 展示每页数据10
    has_add_btn = True #是否有添加按钮
    model_form_class = None #应用模板表
    order_list = [] #排序字段
    search_list = [] #查询列表 里面加orm条件  search_list = ['name__contains', 'email']
    action_list = [] # 批量操作  action_list = [StarkHandler.multi_delete, StarkHandler.multi_init]  # 将函数传过去
    search_group = [] #组合查询
    
    change_list_template = None #类变量 展示界面的模板
    add_template = None #类变量 展示界面的模板
    change_template = None #类变量 展示界面的模板
    delete_template = None #类变量 展示界面的模板
    
    
    ps:可以根据业务需要重写v1.py StarkHandler类中的方法
    def get_queryset(self,request,*args,**kwargs):
    '''预留的钩子可过滤页面显示内容'''
    return self.model_class.objects
    
    def get_model_form_class(self,is_add,request,pk,*args,**kwargs):
    '''
    添加或编辑的ModelForm表单,可重写方法自定义modelform
    :param is_add:是否是添加页面的表单,否则是编辑界面
    :return:
    '''
    if self.model_form_class:
        return self.model_form_class

    else:
        class DynamicModelForm(StarkModelForm):
            class Meta:
                model = self.model_class
                fields = '__all__'

        return DynamicModelForm
    
    def save(self, request,form, is_update,*args,**kwargs):
        #表单中没有显示的字段,设置到数据库 如 form.isntance.pid = 1
        form.save()
    
    def get_urls(self):
    '''
    默认是4个url,在继承的StarkHandler类中重写get_urls(),可以减少url、视图
    :return:
    '''
    patterns = [
        re_path(r'^list/$', self.wrapper(self.changelist_view), name=self.get_list_url_name),
        re_path(r'^add/$', self.wrapper(self.add_view), name=self.get_add_url_name),
        re_path(r'^change/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name),
        re_path(r'^delete/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name),
    ]

    patterns.extend(self.extra_url())
    return patterns


    def extra_url(self):
    '''
    预留的钩子,可添加视图
    :return:
    '''
    return []   #re_path(r'xxx/$', self.wrapper(self.changelist_view), name=self.get_list_url_name),

示例


from stark.server.v1 import site,StarkHandler,StarkModelForm,StarkForm,Option
from stark.server.v1 import get_choice_text,get_datetime_text,get_m2m_text
from web import models
from django import forms
from django.urls import reverse
from django.utils.safestring import mark_safe
from stark.forms.DateTimePickerInput import DateTimePickerInput
from .base import PermissonHandler

class ClassListModelForm(StarkModelForm):
    class Meta:
        model = models.ClassList
        fields = '__all__'
        #自定义时间插件
        widgets ={
            'start_date':DateTimePickerInput,
            'graduate_date':DateTimePickerInput,
        }

class ClassListHandler(PermissonHandler,StarkHandler):

    def display_course(self, obj=None, is_header=None):
        '''自定义显示字段'''
        if is_header:
            return '班级'
        return "%s%s期"%(obj.course.name,obj.semester) #Python全栈1期

    def display_course_record(self, obj=None, is_header=None):
        '''自定义显示字段'''
        if is_header:
            return '上课记录'
        record_url = reverse('stark:web_courserecord_list', kwargs={'class_id': obj.pk})
        return mark_safe('<a target="_blank" href="%s">上课记录</a>'% record_url)


    list_display = ['school',display_course,'price',get_datetime_text('开班日期','start_date'),'class_teacher',get_m2m_text('任课老师','teach_teacher'),
                    display_course_record]

    model_form_class = ClassListModelForm

    search_group = [
        Option('school'),
        Option('course'),
    ]

site.register(models.ClassList,ClassListHandler)

源码示例下载stark组件【stark.zip】

posted @ 2020-03-17 16:25  hanfe1  阅读(154)  评论(0编辑  收藏  举报