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
相关推荐
mazo_command1 小时前
【MATLAB课设五子棋教程】(附源码)
开发语言·matlab
IT猿手1 小时前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
青春男大1 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
88号技师1 小时前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
Zer0_on1 小时前
数据结构栈和队列
c语言·开发语言·数据结构
一只小bit1 小时前
数据结构之栈,队列,树
c语言·开发语言·数据结构·c++
沐霜枫叶2 小时前
解决pycharm无法识别miniconda
ide·python·pycharm
一个没有本领的人2 小时前
win11+matlab2021a配置C-COT
c语言·开发语言·matlab·目标跟踪
途途途途2 小时前
精选9个自动化任务的Python脚本精选
数据库·python·自动化
一只自律的鸡2 小时前
C项目 天天酷跑(下篇)
c语言·开发语言