如何在 Django Rest Framework 的前端更改序列化用户模型的字段名称?

How to change the field name of Serialzed User Model on frontend in Django Rest Framework?

我正在 Django DRF 中使用 REST API 制作一个简单的 Login/Logout 应用程序。我为此行为使用默认 User 模型。

在登录 API 中,我想通过电子邮件对用户进行身份验证,因此我使用 ModelBackend 编写了自定义身份验证。一切正常。

但是,我想将登录API前面的单词username更改为email。我尝试使用 source 属性,但它没有改变。有什么简单的方法吗?我正在寻找类似 verbose_name 的东西,它在 Django 模型中使用。

我的serializers.py是:

class LoginSerializer(serializers.Serializer):
    username = serializers.CharField(source='Email')
    password = serializers.CharField()

    def validate(self, data):
        user = authenticate(**data)
        if user and user.is_active:
            return user
        raise serializers.ValidationError('Incorrect Credentials Passed.')

同样,我使用的是默认 User 模型,我不想 overwrite/override/extend User 模型。我只想将前端字段 username 的名称更改为 email.

我们将不胜感激任何帮助。

您需要将名为 email 而不是 username 的值传递给您的 ModelBackend 子类:

class LoginSerializer(serializers.Serializer):
    username = serializers.CharField()
    password = serializers.CharField()

    def validate(self, data):
        user = authenticate(**{'email': data['username'], 'password': data['password']})
        if user and user.is_active:
            return user
        raise serializers.ValidationError('Incorrect Credentials Passed.')