我想在django-rest-auth中注册一个用户,如果提供了所有的用户名,密码和电子邮件字段。(我也想实现令牌身份验证,以从服务器获取JSON响应。)
django.contrib.auth.User
中默认的email字段是可选的。但是我想将电子邮件文件设置为在数据库中注册所需的,以便用户在没有电子邮件的情况下发出POST请求时获得HTTP错误响应。
在项目中,我通过以下代码注册新用户。
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', User.USERNAME_FIELD, "password", 'full_name',
'is_active', 'links', )
write_only_fields = ('password',)
read_only_fields = ('id',)
def create(self, validated_data):
print("Validated Data",validated_data)
if 'email' in validated_data:
user = get_user_model().objects.create(
username=validated_data['username']
)
user.set_email(validated_data['email'])
user.set_password(validated_data['password'])
user.save()
email = EmailMessage('Hello', 'World',
to=[validated_data['email']])
email.send()
user.is_active=False
return user
else:
return None
然而,上面给出了:
create()没有返回对象实例
如何将email字段设置为必填字段?
我想在django-rest-auth中注册一个用户,如果提供了所有的用户名,密码和电子邮件字段。
在Django REST框架中序列化器上需要字段的正确方法是在初始化字段时设置required=True
,或者使用extra_kwargs
参数在自动生成的字段上设置它。
在django.contrib.auth.User的默认email字段中是可选的。但是我想将电子邮件文件设置为在数据库中注册所需的,以便用户在没有电子邮件的情况下发出POST请求时获得HTTP错误响应。
这意味着默认情况下不需要自动生成的字段,但是您仍然可以使用required=True
覆盖它。
然而,上面给出了:
create()没有返回对象实例
这是因为您没有从create
方法返回User
实例,就像它在罐头上说的那样。具体来说,如果不包含email
字段,则返回None
。None
不是User
实例,并且DRF警告您正在做错误的事情。