首页 > 其他 > 详细

15 django 分页

时间:2021-05-31 00:10:38      阅读:13      评论:0      收藏:0      [点我收藏+]

1 后台

  • 封装分页
from django.core.paginator import Paginator
from django.db.models import Q
from django.forms import model_to_dict
from django.http import JsonResponse


# 做全部查询 - 供调用
def do_get_all_data(s_model, page_index, page_size):
    # 精准查询
    sq_set = get_all_data(s_model)
    # 获取分页数据和paginator
    page_data, paginator = get_paginator(sq_set, page_index, page_size)
    datas = []
    for data in page_data:
        # 查询结果为一个包含model对象的列表 循环该列表获取到每一个Model对象
        # 把Model对象转换成字典,把这些字典添加一个list中
        datas.append(model_to_dict(data))
    result = {code: 1, page_index:page_index, page_size: page_size, total: paginator.count, data: datas, msg: 成功 }
    return JsonResponse(result, json_dumps_params={ensure_ascii: False})


# 做精准查询 - 供调用
def do_filter_request(request,
                     filter_list,
                     f_model,
                     page_index,
                     page_size):
    # 精准查询
    fq_set = get_filter_data(request, filter_list, f_model)
    # 获取分页数据和paginator
    page_data, paginator = get_paginator(fq_set, page_index, page_size)
    datas = []
    for data in page_data:
        # 查询结果为一个包含model对象的列表 循环该列表获取到每一个Model对象
        # 把Model对象转换成字典
        datas.append(model_to_dict(data))
        # 把这些字典添加一个list中
    result = {code: 1, page_index:page_index, page_size: page_size, total: paginator.count, data: datas, msg: 成功 }
    return JsonResponse(result, json_dumps_params={ensure_ascii: False})


# 做模糊查询 - 供调用
def do_search_request(request,
                     search_field,
                     search_list,
                     s_model,
                     page_index,
                     page_size):
    # 精准查询
    fq_set = get_search_data(search_field, search_list, s_model)
    # 获取分页数据和paginator
    page_data, paginator = get_paginator(fq_set, page_index, page_size)
    datas = []
    for data in page_data:
        # 查询结果为一个包含model对象的列表 循环该列表获取到每一个Model对象
        # 把Model对象转换成字典
        datas.append(model_to_dict(data))
        # 把这些字典添加一个list中
    result = {code: 1, page_index:page_index, page_size: page_size, total: paginator.count, data: datas, msg: 成功 }
    return JsonResponse(result, json_dumps_params={ensure_ascii: False})


# 获取分页数据
def get_paginator(request_list, page_index, page_size):
    # 获取 paginator 对象
    paginator=Paginator(request_list,page_size)
    # 获取某页的数据
    page_data=paginator.page(page_index)
    return page_data, paginator


# 精准查询
def get_filter_data(request, filter_list, f_model):
    ‘‘‘
    request: 客户端请求
    filter_list:查询哪些字段
    f_model:使用哪个model查
    ‘‘‘
    dict = {}
    # 遍历filter_list,用户输入和filter内容生成字典
    for field in filter_list:
        value = request.GET.get(field)
        if value is not None:
            dict[field] = value
    if dict is not None:
        q_set = f_model.objects.filter(**dict)
    return q_set


# 模糊查询
def get_search_data(search_value, search_list, s_model):
    ‘‘‘
    request: 客户端请求
    search_field:查询哪个字段
    search_list:查询哪些字段
    s_model:使用哪个model查
    ‘‘‘
    # search_field = request.GET.get(search_field)
    dict = {}
    q = Q()
    for field in search_list:
        dict[{}__contains.format(field)] = search_value
        q = q | Q(**dict)
    q_set = s_model.objects.filter(q)
    return q_set


# 全部查询
def get_all_data(s_model):
    ‘‘‘
    s_model:使用哪个model查
    ‘‘‘
    q_set = s_model.objects.all().order_by(id)
    return q_set
  • view
# 查询全部
class ProjectList(View):
    @login_check
    def get(self, request):
        page_index = request.GET.get(page_index, 1)
        page_size = request.GET.get(page_size, 10)
        print(page_index)
        print(page_size)
        # 全部查询
        result = do_get_all_data(Project, page_index=page_index, page_size=page_size)
        return result


# 模糊查询
class SearchProject(View):
    @login_check
    def get(self, request):
        page_index = request.GET.get(page_index, 1)
        page_size = request.GET.get(page_size, 10)
        search_field = request.GET.get(proj_name)
        print(page_index)
        print(page_size)
        print(search_field)
        search_list = [proj_name]
        # 模糊查询
        result = do_search_request(request, search_field, search_list,
                                   Project, page_index=page_index, page_size=page_size)
        return result


# 精准查询
class FilterProject(View):
    @login_check
    def get(self, request):
        page_index = request.GET.get(page_index, 1)
        page_size = request.GET.get(page_size, 10)
        print(page_index)
        print(page_size)
        filter_list = [proj_name]
        # 模糊查询
        result = do_filter_request(request, filter_list,
                                   Project, page_index=page_index, page_size=page_size)
        return result
  • urls
# 工程urls
urlpatterns = [
    path(admin/, admin.site.urls),
    path(v1/user/, include((user.urls, apps.user), user)),  # 分布式路由,匹配到/v1/user后,到 user urls中找 user 后面的path
    path(v1/project/, include((project.urls, apps.project), project)),
]

# 产品urls
urlpatterns = [
    path(add, AddProject.as_view(), name=add),
    path(list, ProjectList.as_view(), name=list),
    path(search, SearchProject.as_view(), name=search),
    path(filter, FilterProject.as_view(), name=filter),

]
  • 响应

技术分享图片

 

 

 

2 前台

  • 请求
// 查询全部
export const project_list = query => {
    return fetch(baseurl + /v1/project/list?
        +page_index=+query.page_index+&page_size=+query.page_size, {
        method: GET,
        // params: query,
        headers: new Headers({authorization: localStorage.getItem(token)}),
    }).then(response => {
        return response.json()
    })
}
// 模糊查询
export const search_project = query => {
    return fetch(baseurl + /v1/project/search?
        +page_index=+query.page_index+&page_size=+query.page_size+&proj_name=+query.proj_name, {
        method: GET,
        // params: query,
        headers: new Headers({authorization: localStorage.getItem(token)}),
    }).then(response => {
        return response.json()
    })
}
  • vue创建时调用查询全部
import {project_add, project_list,search_project} from "@/api/lizi";

    created() {
        // 当页面创建时,请求产品列表
        this.getData();
    },


        // 获取 easy-mock 的模拟数据
        getData() {
          project_list(this.query).then(res => {
                this.tableData = res.data;
                this.pageTotal = res.total;
            });
        },
        // 分页导航
        handlePageChange(val) {
          console.log(this.query)
          console.log(`当前页: ${val}`);
          this.$set(this.query, "page_index", val);
          this.getData();
        },

 

15 django 分页

原文:https://www.cnblogs.com/lizitestdev/p/14829266.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!