Fra*_*eit 0 python authentication django django-rest-framework
我正在尝试使用 rest 框架创建用户,但我可以使用相同的电子邮件创建多个用户,我如何验证已接收的电子邮件?
这是我的序列化程序代码:
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
class UserSerializer(serializers.ModelSerializer):
invoices = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
password = serializers.CharField(write_only=True)
def create(self, validated_data):
user = get_user_model().objects.create(
email=validated_data['email'],
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = User
write_only_fields = 'password'
read_only_fields = 'id'
fields = ('id',
'username',
'email',
'password',
'invoices',
)
Run Code Online (Sandbox Code Playgroud)
提前致谢!
好的,进一步阅读REST FRAMEWORK 文档,有“唯一字段”验证器,通过添加它,它可以完美运行。
email = serializers.EmailField(validators=[UniqueValidator(queryset=User.objects.all())])
Run Code Online (Sandbox Code Playgroud)
所以它看起来像这样
class UserSerializer(serializers.ModelSerializer):
invoices = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
password = serializers.CharField(write_only=True)
email = serializers.EmailField(validators=[UniqueValidator(queryset=User.objects.all())])
def create(self, validated_data):
user = get_user_model().objects.create(
email=validated_data['email'],
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = User
write_only_fields = 'password'
read_only_fields = 'id'
fields = ('id',
'username',
'email',
'password',
'invoices',
)
Run Code Online (Sandbox Code Playgroud)
感谢您的支持!
| 归档时间: |
|
| 查看次数: |
1905 次 |
| 最近记录: |