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
相关推荐
longxiaozhang632 分钟前
C#运算符重载:让对象也能使用“加减乘除”
开发语言·c#
W_3260039 分钟前
Python-OpenCV HSV颜色空间与inRange颜色分割:按颜色提取目标物体
图像处理·人工智能·python·opencv·机器学习
mounter6251 小时前
GCCRS 突破与 Rust 入核:Linux 工具链的重大变革
linux·开发语言·rust·linux kernel·kernel
Buke..1 小时前
【APP 逆向】哔哩哔哩 sign 参数逆向(上):Frida 反调试绕过与 unidbg 调用
java·开发语言·爬虫·python·安卓
abcefg_h1 小时前
MCP 实战指南:如何在项目中使用 Model Context Protocol 及其通信原理
开发语言·后端·golang·mcp
头发够用的程序员2 小时前
ImportError: libopenblas.so.0: cannot open shared object file 完整复盘与解决方案
python·ubuntu
梦痕长情2 小时前
记一次关于AI在数仓中的应用
开发语言·人工智能·python·ai
何以解忧,唯有..2 小时前
Python 线程编程:从入门到实战
开发语言·python
l1258652 小时前
# RAG上线评估指标体系:六大核心指标与压测实战全解析
数据库·人工智能·python·mysql·langchain·milvus