增加用户
接口分析
请求方式:POST   /meiduo_admin/users/
请求参数: 通过请求头传递jwt token数据。
| 参数 | 类型 | 是否必须 | 说明 | 
|---|---|---|---|
| username | str | 是 | 用户名 | 
| mobile | str | 是 | 手机号 | 
| password | int | 是 | 密码 | 
| str | 否 | 邮箱 | 
返回数据: JSON
 {
        "id": "用户id",
        "username": "用户名",
        "mobile": "手机号",
        "email": "邮箱"
    }
| 返回值 | 类型 | 是否必须 | 说明 | 
|---|---|---|---|
| id | int | 是 | 用户id | 
| username | str | 是 | 用户名 | 
| mobile | str | 是 | 手机号 | 
| str | 是 | 邮箱 | 
后端实现
from rest_framework.generics import ListCreateAPIView
from meiduo_admin.serializers.user import UserSerializer, UserAddSerializer
from meiduo_admin.utils.pagenum import PageNum
from users.models import User
class UserView(ListCreateAPIView):
    pagination_class = PageNum
    # 根据不同的请求方式返回不同序列化器
    def get_serializer_class(self):
        # 请求方式是GET,则是获取用户数据返回UserSerializer
        if self.request.method == 'GET':
            return UserSerializer
        else:
            # POST请求,完成保存用户,返回UserAddSerializer
            return UserAddSerializer
    def get_queryset(self):
        keyword = self.request.query_params.get('keyword')
        if keyword is '':
            return User.objects.all()
        else:
            return User.objects.filter(username=keyword)
注意:
在获取和保存用户是,请求路径是一样的,所以我们在一个UserView类视图中完成两个功能,所以我们需要对原有的类视图进行改写,继承ListCreateAPIView,同时重写get_serializer_class方法
指定序列化器:
from rest_framework import serializers
from users.models import User
class UserAddSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'mobile', 'email', 'password')
        # username字段增加长度限制,password字段只参与保存,不在返回给前端,增加write_only选项参数
        extra_kwargs = {
            'username': {
                'max_length': 20,
                'min_length': 5
            },
            'password': {
                'max_length': 20,
                'min_length': 8,
                'write_only': True
            },
        }
    # 重写create方法
    def create(self, validated_data):
        # 保存用户数据并对密码加密
        user = User.objects.create_user(**validated_data)
        return user