Django rest framework 在登录数据库时不加密密码

Django rest framework not encrypting passwords, when being logged into the database

所以我使用 Django 的(1.7 和 postgres)Rest Api (Django REST framework 3.0.2) 和基本身份验证来注册和验证我的移动测试应用程序的用户。问题是我通过管理面板创建的用户加密了他们的密码,但是当我创建用户时,使用 rest-framework 进入同一个 "User" (默认)数据库,密码没有加密。这给我们带来了几个问题(尤其是验证用户从 api-token-auth 获取令牌)。有什么我可以做的吗?也许在设置中? (我们的服务器上还有 运行 gunicorn 和 ngnix)。 非常感谢!

听起来您只是在使用 ModelSerializer 和 ModelViewSet。您将不得不重写 ModelSerializer 的创建方法。

def create(self, validated_data):
    user = User(
        email=validated_data['email'],
        username=validated_data['username']
    )
    user.set_password(validated_data['password'])
    user.save()
    return user

ModelSerializer 的 doc 有一个可能有用的示例。

简单的方法

class CreateUserSerializer(serializers.ModelSerializer):
class Meta:
    model = User
    fields = ['email', 'username', 'password']
    extra_kwargs = {'password': {'write_only': True}}

def create(self, validated_data):
    user = User(
        email=validated_data['email'],
        username=validated_data['username']
    )
    user.set_password(validated_data['password'])
    user.save()
    return user