池塘 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