DRF反序列化时数据验证完毕返回的是None值

文章目录

错误复现

serializers.py

bash 复制代码
class LoginSerializer(serializers.Serializer):

    username = serializers.CharField(min_length=5, max_length=10, help_text="账号")
    password = serializers.CharField(min_length=5, max_length=10, help_text="密码")

    # 校验用户名
    def validate_username(self, value):
        if not re.match(r'^[a-zA-Z0-9_-]{5,10}$', value):
            raise serializers.ValidationError("请输入5-20的用户名!")

    # 校验密码
    def validate_password(self, value):
        if not re.match(r'^[a-zA-Z0-9_-]{6,10}$', value):
            raise serializers.ValidationError("请输入6-20的密码!")

view.py

bash 复制代码
class LoginGenericAPIView(GenericAPIView):

    queryset = User.objects.all()
    serializer_class = LoginSerializer

    permission_classes = [AllowAny]

    def post(self, request):
        # 获取序列化器
        serializer = self.get_serializer(data=request.data)
        print(request.data)
        # 验证数据
        if not serializer.is_valid():
            return Response(serializer.errors)

        print(serializer)
        print(serializer.data)
        return Response(serializer.data)

错误

请求可以获取到value但是验证完毕数据一直为None

解决方案

一定不要像我一样粗心

bash 复制代码
validate_<field_name>验证完毕没有返回Value

正确的代码

bash 复制代码
class LoginSerializer(serializers.Serializer):

    username = serializers.CharField(min_length=5, max_length=10, help_text="账号")
    password = serializers.CharField(min_length=5, max_length=10, help_text="密码")

    # 校验用户名
    def validate_username(self, value):
        if not re.match(r'^[a-zA-Z0-9_-]{5,10}$', value):
            raise serializers.ValidationError("请输入5-20的用户名!")
        return value
    
    # 校验密码
    def validate_password(self, value):
        if not re.match(r'^[a-zA-Z0-9_-]{6,10}$', value):
            raise serializers.ValidationError("请输入6-20的密码!")
        return value
相关推荐
小破农10 分钟前
C++篇——多态
开发语言·c++
Q_Q196328847511 分钟前
python的漫画网站管理系统
开发语言·spring boot·python·django·flask·node.js·php
言之。12 分钟前
Go 语言中接口类型转换为具体类型
开发语言·后端·golang
咖啡の猫14 分钟前
JavaScript基础-创建对象的三种方式
开发语言·javascript·ecmascript
代码不停20 分钟前
Java二叉树题目练习
java·开发语言·数据结构
搂……住22 分钟前
第一次做逆向
python
卡尔曼的BD SLAMer28 分钟前
计算机视觉与深度学习 | Python实现EMD-SSA-VMD-LSTM-Attention时间序列预测(完整源码和数据)
python·深度学习·算法·cnn·lstm
77tian34 分钟前
VMware中快速安装与优化Ubuntu全攻略
开发语言·ubuntu
代码的乐趣43 分钟前
支持selenium的chrome driver更新到136.0.7103.94
chrome·python·selenium
愚润求学1 小时前
【Linux】进程间通信(一):认识管道
linux·运维·服务器·开发语言·c++·笔记