我正在尝试创建Views.py方法,检查数据库中是否已经存在电子邮件。它适用于用户名,但不适用于电子邮件或令牌。怎样才能做到这一点?谢谢大家!
@api_view(['POST'])
def send_user_details(request):
if request.method == "POST":
serializer = SignUpDetailsForm(data=request.data)
if serializer.is_valid():
email = serializer.validated_data['email']
username = serializer.validated_data['username']
password = serializer.validated_data['password']
if User.objects.filter(email=email).exists():
raise email.ValidationError("Este Email ya está en uso")
if User.objects.filter(username=username).exists():
raise username.ValidationError("Este Usuario ya está en uso")
这是序列化程序:
class SignUpDetailsForm(serializers.ModelSerializer):
class Meta:
model = SignUpDetails
fields = (
'first_name',
'last_name',
'email',
'username',
'password',
)
它生成AttributeError:“str”对象没有属性“ValidationError”
考虑将这些检查迁移到^ {< CD1> }:
资料来源:https://docs.djangoproject.com/en/3.2/ref/forms/validation/#cleaning-a-specific-field-attribute
您不能使用
raise
email.ValidationError(…)email
是一个str
字符串,字符串没有ValidationError
属性。它也是非感官的,因为变量email不包含单词email您的用户名也没有验证:这是由序列化程序完成的,序列化程序只是在这方面出错,因为
User
模型的username
字段要求username
是唯一的。因此,序列化程序将对此进行验证选项1:由序列化程序进行验证
您还可以为电子邮件实现逻辑。例如,通过定义您自己的模型,或通过向电子邮件序列化字段添加^{} [DRF-doc]:
现在序列化程序将检查电子邮件是否唯一,否则将引发错误。因此,您应该而不是在视图中进行验证,这属于序列化层
选项2:指定电子邮件字段的唯一性
如果定义了自己的用户模型,还可以使电子邮件字段唯一,则用户模型如下所示:
你确定它对
username
有效吗? 好了,我们应该将ValidationError作为异常对象来引发我们不应该期望表单中的任何值都会引发此异常
相关问题 更多 >
编程相关推荐