Django后端實現模塊查詢和精確查詢
views.py
1 from django.db.models import Q 2 from django.forms import model_to_dict 3 from django.http import JsonResponse 4 from django.core.paginator import Paginator 5 from django.views import View 6 7 class CaseView(View): 8 def get(self,request): 9 limit = request.GET.get('limit',20)#分頁,獲取每頁xxx條 10 page = request.GET.get('page',1)#分頁,獲取第xxx頁 11 search = request.GET.get('search')#模糊搜索關鍵字 , 請求: /api/case?search=xxx 12 filter_field = ['id','title','method']#關鍵字精確查詢,通過哪些字段查詢 , 請求: /api/case?id=xxx&title=xxx 13 filter_dict = {} #{id:1,title:xxx,method:2} 14 for field in filter_field: 15 value = request.GET.get(field) 16 if value: 17 filter_dict[field] = value 18 if filter_dict: 19 case_sets = models.Case.objects.filter(**filter_dict) 20 elif search:#模糊查詢 21 case_sets = models.Case.objects.filter(Q(title__contains=search) | 22 Q(desc__contains=search) | 23 Q(url__contains=search) | 24 Q(params__contains=search))#模糊查詢 25 else: 26 case_sets = models.Case.objects.filter(is_delete=False)#查詢所有 27 28 paginator = Paginator(case_sets,limit) #分頁,獲取分頁對象 29 page_data = paginator.page(page) #分頁,獲取分頁數據,返回的是model對象 30 31 data = [] 32 for c in page_data:#分頁字典拼接成list 33 d = model_to_dict(c) 34 data.append(d) 35 response = {'code': 0, 'msg': '添加成功', 'data': data,'count':paginator.count} 36 return JsonResponse(response, json_dumps_params={'ensure_ascii': False}) # 漢字不轉義