【问题标题】:Django REST Framework - How to encrypt the passwords from PUT and PATCH?Django REST Framework - 如何加密来自 PUT 和 PATCH 的密码?
【发布时间】:2018-03-31 03:40:54
【问题描述】:

目前我 PUT 或 PATCH 的任何密码都不会加密。

我正在使用 ModelSerializer。

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

使用模型视图集

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您应该覆盖 serializers 中的 createupdate 方法以使加密成为可能:

    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'
            )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 2015-01-08
      • 2019-05-25
      • 2016-12-15
      相关资源
      最近更新 更多