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
相关推荐
dapeng28701 分钟前
多协议网络库设计
开发语言·c++·算法
二闹2 分钟前
别再死记硬背了!带你扒开*args和**kwargs的底裤
后端·python
浅浅的小草3 分钟前
APM使用LUA脚本发送实现遥控器PWM信号输出CAN协议信号
开发语言·apm
星空露珠8 分钟前
又双叒叕统计被炸死的lua脚本
开发语言·数据结构·算法·游戏·lua
m0_7432974215 分钟前
Python在金融科技(FinTech)中的应用
jvm·数据库·python
老师好,我是刘同学16 分钟前
列表推导式详解与实战应用
python
sinat_2554878126 分钟前
transient 修饰符·学习笔记
java·开发语言·spring
阿猿收手吧!28 分钟前
【C++】建造者与代理模式实战解析
开发语言·c++·代理模式
2501_9454248041 分钟前
C++跨平台开发实战
开发语言·c++·算法
与虾牵手43 分钟前
Rust 入门:一个写了 6 年 Python 的人,被编译器骂了三天
python