一百零二

in serializers.py write some validation like phone number, and password and confirm password is a match or not.

class PersonSerializer(serializers.ModelSerializer):
        GENDER_CHOICES = [
            ("male", "Male"),
            ("female", "Female"),
            ("other", "Other"),
        ]
    
        gender = serializers.ChoiceField(choices=GENDER_CHOICES)
        class Meta:
            model = Person
            fields = "__all__"
    
        def create(self, validated_data):
            gender = validated_data.pop("gender")
            validated_data["gender"] = gender.lower()
            return Person.objects.create(**validated_data)
        
        def validate(self, data: Union[str,int]) -> Union[str,int,None]:
            username = data.get("username")
            password = data.get("password")
            confirmpassword=data.get("confirmpassword")
            phone = data.get("phone")
    
            if Person.objects.filter(username=username).exists():
                raise serializers.ValidationError('Username is allready exists')
            if len(phone) != 10:
                raise serializers.ValidationError("phone number is not valid")
            if password != confirmpassword:
                raise serializers.ValidationError('password not match')
            return data

views.pyviews.py中,我还判断串行化器是否有效.然后不知道如何编写代码显示错误模板.


class RegisterView(generics.CreateAPIView):
        serializer_class = PersonSerializer
        renderer_classes = [TemplateHTMLRenderer]
        template_name = "register.html"
    
        def get(self, request: Union[Request, HttpRequest]) -> Union[render, redirect]:
            if "username" in request.session:
                return redirect("home")
            serializer = PersonSerializer()
            return render(request, self.template_name, {"serializer": serializer})
    
        def post(self, request: Union[Request, HttpRequest]) -> Union[redirect, render]:
            serializer = PersonSerializer(data=request.data)
            if not serializer.is_valid(raise_exception=True):
                redirect("register")
            return redirect("login")


我希望在模板中显示一个错误,该错误显示与添加CSS上的错误.

推荐答案

except ValidationError as e:
    error_message = str(e.detail['non_field_errors'][0])
    return Response({'error': error_message}, status=status.HTTP_400_BAD_REQUEST) 

您好,要从序列化程序获取错误消息,您可以在您的视图中放入"Except ValidationError as e",然后您可以专门获取消息并将其作为响应返回,这样您就可以在模板中显示这些消息

Python相关问答推荐

三个给定的坐标可以是矩形的点吗

Vectorize多个头寸的止盈/止盈回溯测试pythonpandas

如何从.cgi网站刮一张表到rame?

从groupby执行计算后创建新的子框架

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

递归访问嵌套字典中的元素值

实现神经网络代码时的TypeError

Plotly Dash Creating Interactive Graph下拉列表

matplotlib + python foor loop

从旋转的DF查询非NaN值

Python—为什么我的代码返回一个TypeError

应用指定的规则构建数组

没有内置pip模块的Python3.11--S在做什么?

Pandas:将值从一列移动到适当的列

用0填充没有覆盖范围的垃圾箱

从列表中分离数据的最佳方式

如何获取给定列中包含特定值的行号?

如何让PYTHON上的Selify连接到现有的Firefox实例-我无法连接到Marionette端口

在不降低分辨率的情况下绘制一组数据点的最外轮廓

Sknowled线性回归()不需要迭代和学习率作为参数