用户的查询获取
接口分析
请求方式:GET   /meiduo_admin/users/?keyword=<搜索内容>&page=<页码>&pagesize=<页容量>
请求参数: 通过请求头传递jwt token数据。
| 参数 | 类型 | 是否必须 | 说明 | 
|---|---|---|---|
| keyword | str | 否 | 搜索用户名 | 
| page | int | 否 | 页码 | 
| pagesize | int | 否 | 页容量 | 
返回数据: JSON
 {
        "counts": "用户总量",
        "lists": [
            {
                "id": "用户id",
                "username": "用户名",
                "mobile": "手机号",
                "email": "邮箱"
            },
            ...
        ],
        "page": "页码",
        "pages": "总页数",
        "pagesize": "页容量"
      }
| 返回值 | 类型 | 是否必须 | 说明 | 
|---|---|---|---|
| count | int | 是 | 用户总量 | 
| Lists | 数组 | 是 | 用户信息 | 
| page | int | 是 | 页码 | 
| pages | int | 是 | 总页数 | 
| pagesize | int | 是 | 页容量 | 
后端实现
from rest_framework.generics import ListAPIView
from meiduo_admin.serializers.user import UserSerializer
from meiduo_admin.utils.pagenum import PageNum
from users.models import User
class UserView(ListAPIView):
    # 指定使用的序列化器
    serializer_class = UserSerializer
    # 指定分页器
    pagination_class = PageNum
    # 重写get_queryset方法,根据前端是否传递keyword值返回不同查询结果
    def get_queryset(self):
        # 获取前端传递的keyword值
        keyword = self.request.query_params.get('keyword')
        # 如果keyword是空字符,则说明要获取所有用户数据
        if keyword is '' or keyword is None:
            return User.objects.all()
        else:
            return User.objects.filter(username=keyword)
指定序列化器:
from rest_framework import serializers
from users.models import User
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model=User
        fields=('id','username','mobile','email')
指定分页器:
class UserPageNum(PageNumberPagination):
    page_size = 5  # 后端指定每页显示数量
    page_size_query_param = 'pagesize'
    max_page_size = 10
    # 重写分页返回方法,按照指定的字段进行分页数据返回
    def get_paginated_response(self, data):
        return Response({
            'count': self.page.paginator.count, # 总数量
            'lists': data,  # 用户数据
            'page' : self.page.number, # 当前页数
            'pages' : self.page.paginator.num_pages, # 总页数
            'pagesize':self.page_size  # 后端指定的页容量
        })