Django 分页等拆分功能-前后端分离
Posted beautyl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 分页等拆分功能-前后端分离相关的知识,希望对你有一定的参考价值。
对views cvb中的分页功能进行拆分,单独把分页写成一个函数在这个caseview中
1 class CaseView(View): 2 # 添加了form校验 3 # cvb的方式统一实现测试用例的增删改查 4 def get_paginator(self,list): 5 # 把分页功能封装成view cvb中的一个函数,要分页的对象list为参数 6 limit=self.request.GET.get(‘limit‘) 7 page=self.request.GET.get(‘page‘) 8 # 在一个类中,可以使用self.request 获取到limit和page的值 9 paginator=Paginator(list,limit) 10 page_data=paginator.page(page) 11 return page_data,paginator 12 13 def get(self,request): 14 search=request.GET.get(‘search‘) 15 # 在搜索的时候可以输入search字段,为查询条件 16 filter_field=[‘title‘,‘method‘] 17 # 先定义了可以通过哪些字段进行过滤筛选的一个list 18 dict={} 19 for field in filter_field: 20 value=request.GET.get(field) 21 # 去url中获取这些字段对应的值,当然,如果没有,value为空 22 if value: 23 dict[field]=value 24 # 如果value不为空,就存到字典里面 25 if filter_field: 26 # 先进行过滤筛选,精确查询 27 case_sets=models.Case.objects.filter(**dict) 28 elif search: 29 # 再进行模糊查询 30 case_sets = models.Case.objects.filter(Q(title__contains=search)|Q(desc__contains=search)) 31 # 实现模糊查询:可以通过哪几个字段来模糊查询。也就是查询哪些字段包含要搜索的关键字。用或 32 else: 33 # 如果没有任何条件就查询所有的 34 case_sets=models.Case.objects.filter(is_delete=False) 35 36 page_data,paginator=self.get_paginator(case_sets) 37 # 把分页封装成view cbv中的一个函数 38 39 # paginator=Paginator(case_sets,limit) 40 # page_data=paginator.page(page) 41 # 实现查询,分页后再返回给前端 42 43 data = [] 44 for c in page_data: 45 # 查询结果为一个包含model对象的列表 循环该列表获取到每一个Model对象 46 case = model_to_dict(c) 47 # 把Model对象转换成字典 48 data.append(case) 49 # 把这些字典添加一个list中 50 response = {‘code‘: 0, ‘msg‘: ‘成功‘, ‘data‘: data,‘count‘:paginator.count} 51 return JsonResponse(response, json_dumps_params={‘ensure_ascii‘: False})
对views cvb中的查询功能进行拆分,单独把过滤查询/模糊查询写成函数在这个caseview中
1 class CaseView(View): 2 def get_filter_data(self): 3 case_sets=[] 4 filter_field=[‘title‘,‘method‘] 5 dict = {} 6 for field in filter_field: 7 value = self.request.GET.get(field) 8 if value: 9 dict[field] = value 10 if dict: 11 case_sets = models.Case.objects.filter(**dict) 12 return dict,case_sets 13 def get_search_data(self): 14 case_sets=[] 15 search=self.request.GET.get(‘search‘) 16 if search: 17 case_sets = models.Case.objects.filter(Q(title__contains=search) | Q(desc__contains=search)) 18 return search,case_sets 19 20 21 def get(self,request): 22 dict,filter_case_sets=self.get_filter_data() 23 search,search_case_sets=self.get_search_data() 24 25 if dict and self.get_filter_data(): 26 sets=self.get_filter_data()[1] 27 elif search and self.get_search_data(): 28 sets=search_case_sets 29 elif not dict and not search: 30 sets=models.Case.objects.filter(is_delete=False) 31 else: 32 sets=filter_case_sets 33 # 把查询的精确查询/模糊查询/查询所有封装成view的一个函数 34 page_data,paginator=self.get_paginator(sets)
对模糊查询函数进行优化
1 def get_search_data2(self): 2 # 模糊查询,先定义好可以进行模糊查询的字段 3 search=self.request.GET.get(‘search‘) 4 search_field=[‘title‘,‘desc‘] 5 dict={} 6 q=Q() 7 for field in search_field: 8 dict[‘%s__contains‘%field]=search 9 q=q|Q(**dict) 10 case_sets=models.Case.objects.filter(q) 11 return case_sets
以上是关于Django 分页等拆分功能-前后端分离的主要内容,如果未能解决你的问题,请参考以下文章
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十五(实现商品页面搜索功能,以及分页功能)
前后端分离之后端代码实现获取数据库数据——django+mysql+vue+element