1

如果提供了所有用户名、密码和电子邮件字段,我想在 django-rest-auth 中注册一个用户。(我也想实现令牌认证以从服务器获取 JSON 响应。)

中的默认电子邮件字段django.contrib.auth.User是可选的。但是我想根据需要设置电子邮件在数据库中注册,以便用户在没有电子邮件的情况下发出 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() 没有返回对象实例

如何将电子邮件字段设置为必填字段?

4

1 回答 1

0

如果提供了所有用户名、密码和电子邮件字段,我想在 django-rest-auth 中注册一个用户。

在 Django REST 框架中要求序列化程序上的字段的正确方法是在初始化字段时设置required=True,或者使用extra_kwargs参数将其设置在自动生成的字段上。

在 django.contrib.auth.User 的默认电子邮件字段中是可选的。但是我想根据需要设置在数据库中注册的电子邮件,以便用户在没有电子邮件的情况下发出 POST 请求时获得 HTTP 错误响应。

这意味着默认情况下不需要自动生成的字段,但您仍然可以使用required=True.

但是,上面给出了:

create() 没有返回对象实例

这是因为您没有User从方法中返回实例create,就像它在锡上所说的那样。具体来说,如果不包含None该字段,您将返回。不是一个实例,DRF 警告你你做错了什么。emailNoneUser

于 2015-05-23T21:29:02.607 回答