池塘 2020-04-25
对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