gpt4 book ai didi

django - 我可以构建一个序列化程序来验证 is_valid 调用中的用户名和电子邮件是否存在吗?

转载 作者:行者123 更新时间:2023-12-04 03:35:33 24 4
gpt4 key购买 nike

伙计们!我有这个用户模型的序列化器类

class UserSerializer(serializers.ModelSerializer):
username = serializers.RegexField("^(?=.{6,20}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$")
full_name = serializers.RegexField("^([a-zA-Z]{2,}\s[a-zA-Z]{1,}'?-?[a-zA-Z]{2,}\s?([a-zA-Z]{1,})?)")
email = serializers.EmailField()
phone = serializers.RegexField("^(\+\d{1,2}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$")

class Meta:
model = User
fields = ['username', 'full_name', 'email', 'password', 'phone']

目前这是我的序列化程序类。我想在保存用户之前验证用户名和电子邮件不存在。我可以不用手动编写验证吗?我还需要验证用户名的正则表达式和电子邮件的电子邮件字段

谢谢!

最佳答案

您可以使用 validate_{fieldname} 验证字段:

class UserSerializer(serializers.ModelSerializer):
username = serializers.RegexField("^(?=.{6,20}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$")
full_name = serializers.RegexField("^([a-zA-Z]{2,}\s[a-zA-Z]{1,}'?-?[a-zA-Z]{2,}\s?([a-zA-Z]{1,})?)")
email = serializers.EmailField()
phone = serializers.RegexField("^(\+\d{1,2}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$")

class Meta:
model = User
fields = ['username', 'full_name', 'email', 'password', 'phone']


def validate_username(self, value):
if User.objects.filter(username=value).exists():
raise serializers.ValidationError("A user with this username already exists!")
return value

def validate_email(self, value):
if User.objects.filter(email=value).exists():
raise serializers.ValidationError("A user with this email already exists!")
return value

请注意,我个人会使用这些方法根据正则表达式(使用 re 模块)检查输入,并使用 CharField 作为用户名字段,使用 EmailField 作为电子邮件。

关于django - 我可以构建一个序列化程序来验证 is_valid 调用中的用户名和电子邮件是否存在吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67009095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com