如何在Django模板中显示序列化错误
我用Django的rest框架创建了一个注册页面,现在我把所有的验证代码都写在了serializers.py
里。不过在serializers.py
里写了一些错误,但我在模板中看不到这些错误。
在serializers.py
里,我写了一些验证,比如手机号码、密码和确认密码是否匹配。
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.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样式。
1 个回答
0
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”,这样你就可以专门获取错误信息,并把它作为响应返回,这样就能在模板中显示这些信息了。