В настоящее время я пытаюсь вернуть данные в формате представления json или api со следующими текстовыми полями (адрес электронной почты, страна и номер телефона), однако у меня также есть 2 функции проверки для проверки значения в полях адреса электронной почты и номера телефона, которыетребуется метод get (), а также использовать его для передачи текста в качестве аргумента. Я не уверен, работают ли 2 функции проверки или нет, как при вводе недействительного электронного письма, оно все еще принимается как действительные данные. Пожалуйста, скажите мне, что я делаю неправильно и какие изменения необходимо внести в мой текущий код.
/* serializers.py */
import re
import phonenumbers
from rest_framework import serializers
from .models import validation
from phonenumbers import carrier
from validate_email import validate_email
class validationSerializer(serializers.ModelSerializer):
class Meta:
model = validation
fields = '__all__'
def clean_email(self):
email = self.cleaned_data.get("email")
if not validate_email(email, check_mx=True, verify=True):
raise serializers.ValidationError("Invalid email")
return email
def clean_phone_number(self):
phone_number = self.cleaned_data.get("phone_number")
clean_number = re.sub("[^0-9&^+]", "", phone_number)
alpha_2 = self.cleaned_data.get("country")
z = phonenumbers.parse(clean_number, "%s" % (alpha_2))
if len(clean_number) > 15 or len(clean_number) < 3:
raise serializers.ValidationError(
"Number cannot be more than 15 or less than 3")
if not phonenumbers.is_valid_number(z):
raise serializers.ValidationError(
"Number not correct format or non-existent")
if carrier.name_for_number(z, "en") == '':
raise serializers.ValidationError("Please enter a mobile number")
return phonenumbers.format_number(
z, phonenumbers.PhoneNumberFormat.E164)
/* models.py */
from django.db import models
class validation(models.Model):
email = models.EmailField()
country = models.CharField(max_length=2)
phone_number = models.CharField(max_length=100)
def __str__(self):
return self.email