Django REST框架 - 如何从PUT和PATCH加密密码?

时间:2018-03-30 17:57:28

标签: django rest http encryption django-rest-framework

目前,我PUT或PATCH的任何密码都没有加密。

我正在使用ModelSerializer。

class UserSerializer (serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'pk')

使用ModelViewSet

class UserViewSet (ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

为什么我的密码保存为纯文本?我该如何解决这个问题?

我应该在SerialSet中覆盖updateiser()还是在ViewSet中覆盖update()?问题出在哪里?

1 个答案:

答案 0 :(得分:2)

您应该覆盖create中的updateserializers方法,以便加密:

from django.contrib.auth.hashers import make_password


class UserSerializer(serializers.ModelSerializer):

    def create(self, validated_data):
        user = User.objects.create_user(
            password=make_password(
                validated_data['user'].pop('password')
            ),
            **validated_data.pop('user')
        )

    def update(self, instance, validated_data):
        if 'user' in validated_data:
            instance.user.password = make_password(
                validated_data.get('user').get('password', instance.user.password)
            )
            instance.user.save()

    class Meta:
        model = User
        fields = (
            'url', 'username', 'email', 'pk'
        )