我目前正在尝试使用以下文本字段(电子邮件,国家/地区和电话号码)以json或api视图格式返回数据,但是我也有2个验证功能来验证电子邮件和电话号码字段中的值,需要使用get()方法,并使用它来将文本作为参数传递。我不确定这两个验证功能是否正常工作,就像我输入无效的电子邮件时一样,它仍被视为有效数据。请告诉我我做错了什么,应该对当前代码进行哪些更改。
npm run build
答案 0 :(得分:0)
您的if语句未从函数返回,则应给出验证错误,但此后仍将返回电话号码。
您可以在if语句中返回该函数,也可以使用如下结构:
if not phonenumbers.is_valid_number(z):
raise serializers.ValidationError(
"Number not correct format or non-existent")
elif carrier.name_for_number(z, "en") == '':
raise serializers.ValidationError("Please enter a mobile number")
else:
return phonenumbers.format_number(
z, phonenumbers.PhoneNumberFormat.E164)
答案 1 :(得分:0)
Clean与模型一起使用,validate与串行器一起使用。因此,您必须使用验证而不是清除。根据此示例格式化代码。另外,使用self.validated_data代替self.cleaned_data。
from rest_framework import serializers
class EventSerializer(serializers.Serializer):
description = serializers.CharField(max_length=100)
start = serializers.DateTimeField()
finish = serializers.DateTimeField()
def validate(self, data):
"""
Check that start is before finish.
"""
if data['start'] > data['finish']:
raise serializers.ValidationError("finish must occur after start")
return data
def validate_description(self, value):
"""
Check that event is related to django.
"""
if 'django' not in value.lower():
raise serializers.ValidationError("It is not a django event")
return data
根据您的情况,您可以像这样重写电子邮件验证。
def validate_email(self):
email = self.validated_data.get("email")
if not self.validate_email(email, check_mx=True, verify=True):
raise serializers.ValidationError("Invalid email")
return email
答案 2 :(得分:0)
也许您正在寻找Validators,您可以创建一个验证函数并在kwargs validators=
下的字段中指定它。
链接的一部分:
def validate_even(value):
if value % 2 != 0:
raise ValidationError(
_('%(value)s is not an even number'),
params={'value': value},
)
-----------
even_field = models.IntegerField(validators=[validate_even])