Django rest框架未加密密码,当登录到数据库时

4
所以我正在使用Django(1.7与postgres)的Rest Api(Django REST框架3.0.2)进行基本身份验证来注册和验证我的移动测试应用程序中的用户。问题是,通过管理员面板创建的用户会被加密密码,然而,当我使用rest-framework创建用户到同一个“User”(默认)数据库时,密码不会被加密。这给我们带来了几个问题(特别是验证用户以从api-token-auth获取令牌)。我能做些什么吗?也许在设置中有一些东西?(我们还在服务器上运行gunicorn和ngnix)。 非常感谢!
2个回答

8
听起来你只是在使用ModelSerializer和ModelViewSet。你需要重写ModelSerializer的create方法。
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

模型序列化器的 doc 中有一个例子,可能会很有用。

1
简单的方法来实现这个。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接