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前后端分离项目)十五(实现商品页面搜索功能,以及分页功能)

jQuery如何实现类似JSTL的功能进行前后端分离?

前后端分离之后端代码实现获取数据库数据——django+mysql+vue+element

前后端分离之后端代码实现获取数据库数据——django+mysql+vue+element

Django分页

前后端分离之使用axios进行前后端交互实现评论显示——django+mysql+vue+element