用户管理
在用户页面我们需要完成两个功能:
1、用户信息的查询获取
2、增加用户
用户的查询获取【获取单一数据和多个数据可以通过判断合并到一块写代码】
接口分析请求方式:GET /meiduo_admin/users/?keyword=&page=&pagesize=
from .views import statistical, users
#-------用户管理---------
url(r'^users/$',users.UserView.as_view()),
请求参数: 通过请求头传递jwt token数据。
参数类型是否必须说明keywordstr否搜索用户名pageint否页码pagesizeint否页容量返回数据: JSON
{
"counts": "用户总量",
"lists": [
{
"id": "用户id",
"username": "用户名",
"mobile": "手机号",
"email": "邮箱"
},
...
],
"page": "页码",
"pages": "总页数",
"pagesize": "页容量"
}
返回值类型是否必须说明countint是用户总量Lists数组是用户信息pageint是页码pagesint是总页数pagesizeint是页容量
后端实现
from rest_framework.generics import ListAPIView
from meiduo_admin.serializers.user import UserSerializer
from meiduo_admin.utils import UserPageNum
from users.models import User
class UserView(ListAPIView):
# 指定使用的序列化器
serializer_class = UserSerializer
# 指定分页器
pagination_class = UserPageNum
# 重写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) # 获取单一用户数据,这儿也可以使用模糊查询:username__contains=keyword
指定序列化器:
from rest_framework import serializers
from users.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'mobile', 'email')
指定分页器:【meiduo_admin.utils.pagenum】
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
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 # 后端指定的页容量
})
postman测试: