stark组件 - 定制表的增 ,删,改,查 操作

时间:2019-02-25 20:41:56   收藏:0   阅读:191

主要内容:

 

1. 动态生成增删改查路由:

技术分享图片
 #在StarkConfig类中  
  def wrapper(self, func):
        ‘‘‘
        一个装饰器
        ‘‘‘
        @functools.wraps(func)
        def inner(request,*args, **kwargs):
            #每次请求进来都获取一份
            self.request = request
            return func(request,*args, **kwargs)
        return inner

    def get_urls(self):
        info = self.model_class._meta.app_label, self.model_class._meta.model_name
        urlpatterns = [
            # 使用装饰器的另一种写法,同时使用命名路由
            url(rlist/$, self.wrapper(self.changelist_view),name=%s_%s_changelist % info),
            url(radd/$, self.wrapper(self.add_view), name=%s_%s_add % info),
            url(rchange/(?P<pk>\d+), self.wrapper(self.change_view),name=%s_%s_change % info),
            url(rdel/(?P<pk>\d+), self.wrapper(self.delete_view),name=%s_%s_delete % info),
        ]
        extra = self.extra_url()
        if extra:
            urlpatterns.extend(extra)
        return urlpatterns

    def extra_url(self):
        ‘‘‘
        为单独的某张表添加额外的url
        ‘‘‘
        pass

   @property
    def urls(self):
        #再上一级的路由分发是StarkConfig对象 或者 它的派生类调用改静态方法
        return self.get_urls()
动态生成增删改查路由

2.  查 --  changelist_view

技术分享图片
   #List的视图函数函数 
    def changelist_view(self,request):
        ‘‘‘
        所有url的查看列表页面
        ‘‘‘
        if request.method == POST:
            action_name = request.POST.get(action)
            action_dict = self.get_action_dict()
            if action_name not in action_dict:
                return HttpResponse(非法请求)
            response = getattr(self,action_name)(request)
            if response:
                return response

        ## 处理搜索 ##
        search_list, q, con = self.get_search_condition(request)
        # 通过model_class(app01.models.UserInfo)
        #filter 中可以 加以逗号分隔的字段 ,也可以放 **{} , 或者放q对象

        # ##### 处理分页 #####
        from stark.utils.pagination import Pagination
        total_count = self.model_class.objects.filter(con).count()
        query_params = request.GET.copy()
        query_params._mutable = True
        page = Pagination(request.GET.get(page), total_count, request.path_info, query_params, per_page=3)
        queryset = self.model_class.objects.filter(con).order_by(*self.get_order_by())[page.start:page.end]

        cl = ChangeList(self, queryset, q, search_list, page)
        context = {
            cl: cl
        }
        return render(request, stark/changelist.html, context)C
changelist_view

ChangeList,封装列表页面需要的所有数据

技术分享图片
class ChangeList(object):
    ‘‘‘
    封装列表页面需要的所有数据(功能)
    ‘‘‘
    def __init__(self,config,queryset,q,search_list,page):
        self.q = q
        self.search_list = search_list
        self.page = page
        self.config = config
        self.action_list = [{name: func.__name__, text: func.text} for func in config.get_action_list()]
        self.add_btn = config.get_add_btn() 
        self.queryset = queryset
        self.list_display = config.get_list_display()
ChangeList

 

2.1 定制表格显示列 -- (使用inclusion_tag)

2.2 List 页面中的功能 - 提交的action 功能 (批量初始化,批量删除等)

2.3  在List页面中,表格中数据前checkbox的定制

2.4 LIst页面编辑 & 删除按钮

2.5 List页面的添加按钮

2.6 关键字搜索

注: 技术点 : q 对象的使用

 2.7 编辑&删除, 或者再使用分页,模糊查询后,在进行编辑和删除后,  保留搜索条件

注: 技术点:QueryDict的使用

2.8 分页组件 

3.  增 --  add_view

注: form的获取是通过 类方法 get_model_form_class,对于不同情况可以自己在StarkConfig的派生类中自定制

4.  改--  edit_view

5. 删-- delete_view

 

原文:https://www.cnblogs.com/wcx666/p/10426981.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!