目前,我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()?问题出在哪里?
答案 0 :(得分:2)
您应该覆盖create
中的update
和serializers
方法,以便加密:
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'
)