Django休息框架电子邮件验证

Nar*_*esh 2 django django-rest-framework

我希望在注册前验证用户模型中是否存在电子邮件ID

这是我的验证序列化器

class RegistrationSerializer(serializers.Serializer):
    username = serializers.CharField(max_length=100)
    email = serializers.EmailField()
    password = serializers.CharField(max_length=100)

    def validate_email(self,attrs):
            email=attrs['email']
            print email
            if email:
                    emailset = Q(email__icontains=email)
                    emailres = User.objects.filter(emailset)
                    if emailres:
                            msg = _('The email address is already taken')
                            raise serializers.ValidationError(msg)
                    else:
                            return attars
Run Code Online (Sandbox Code Playgroud)

它抛出错误"TypeError:字符串索引必须是整数"

 email=attrs['email']
Run Code Online (Sandbox Code Playgroud)

TypeError:字符串索引必须是整数

Tod*_*dor 6

我猜你已升级或使用DRF 3.x,因此没有更多的attrs字典而是价值.请参阅字段级验证

更多的是已经有一个UniqueValidator.所以我认为你可以做到:

class RegistrationSerializer(serializers.Serializer):
    #...
    email = serializers.EmailField(validators=[UniqueValidator(queryset=User.objects.all())])
Run Code Online (Sandbox Code Playgroud)