Django 分页等拆分功能-前后端分离

对views cvb中的分页功能进行拆分,单独把分页写成一个函数在这个caseview中

class CaseView(View):
    # 添加了form校验
    # cvb的方式统一实现测试用例的增删改查
    def get_paginator(self,list):
        # 把分页功能封装成view cvb中的一个函数,要分页的对象list为参数
        limit=self.request.GET.get(‘limit‘)
        page=self.request.GET.get(‘page‘)
        # 在一个类中,可以使用self.request 获取到limit和page的值
        paginator=Paginator(list,limit)
        page_data=paginator.page(page)
        return page_data,paginator

    def get(self,request):
        search=request.GET.get(‘search‘)
        # 在搜索的时候可以输入search字段,为查询条件
        filter_field=[‘title‘,‘method‘]
        # 先定义了可以通过哪些字段进行过滤筛选的一个list
        dict={}
        for field in filter_field:
            value=request.GET.get(field)
            # 去url中获取这些字段对应的值,当然,如果没有,value为空
            if value:
                dict[field]=value
                # 如果value不为空,就存到字典里面
        if filter_field:
            # 先进行过滤筛选,精确查询
            case_sets=models.Case.objects.filter(**dict)
        elif search:
            # 再进行模糊查询
            case_sets = models.Case.objects.filter(Q(title__contains=search)|Q(desc__contains=search))
        # 实现模糊查询:可以通过哪几个字段来模糊查询。也就是查询哪些字段包含要搜索的关键字。用或
        else:
            # 如果没有任何条件就查询所有的
            case_sets=models.Case.objects.filter(is_delete=False)

        page_data,paginator=self.get_paginator(case_sets)
        # 把分页封装成view cbv中的一个函数

        # paginator=Paginator(case_sets,limit)
        # page_data=paginator.page(page)
        # 实现查询,分页后再返回给前端

        data = []
        for c in page_data:
            # 查询结果为一个包含model对象的列表 循环该列表获取到每一个Model对象
            case = model_to_dict(c)
            # 把Model对象转换成字典
            data.append(case)
            # 把这些字典添加一个list中
        response = {‘code‘: 0, ‘msg‘: ‘成功‘, ‘data‘: data,‘count‘:paginator.count}
        return JsonResponse(response, json_dumps_params={‘ensure_ascii‘: False})

对views cvb中的查询功能进行拆分,单独把过滤查询/模糊查询写成函数在这个caseview中

class CaseView(View):
    def get_filter_data(self):
        case_sets=[]
        filter_field=[‘title‘,‘method‘]
        dict = {}
        for field in filter_field:
            value = self.request.GET.get(field)
            if value:
                dict[field] = value
        if dict:
            case_sets = models.Case.objects.filter(**dict)
        return dict,case_sets
    def get_search_data(self):
        case_sets=[]
        search=self.request.GET.get(‘search‘)
        if search:
            case_sets = models.Case.objects.filter(Q(title__contains=search) |        Q(desc__contains=search))
        return search,case_sets


    def get(self,request):
        dict,filter_case_sets=self.get_filter_data()
        search,search_case_sets=self.get_search_data()

        if dict and self.get_filter_data():
            sets=self.get_filter_data()[1]
        elif search and self.get_search_data():
            sets=search_case_sets
        elif not dict and not search:
            sets=models.Case.objects.filter(is_delete=False)
        else:
            sets=filter_case_sets
        # 把查询的精确查询/模糊查询/查询所有封装成view的一个函数
        page_data,paginator=self.get_paginator(sets)

 对模糊查询函数进行优化

def get_search_data2(self):
        # 模糊查询,先定义好可以进行模糊查询的字段
        search=self.request.GET.get(‘search‘)
        search_field=[‘title‘,‘desc‘]
        dict={}
        q=Q()
        for field in search_field:
            dict[‘%s__contains‘%field]=search
            q=q|Q(**dict)
        case_sets=models.Case.objects.filter(q)
        return case_sets

相关推荐