gpt4 book ai didi

python - 如何在 Django Rest Framework 中更新用户密码?

转载 作者:IT老高 更新时间:2023-10-28 20:29:47 24 4
gpt4 key购买 nike

我想询问以下代码提供了更新密码,但我想在当前密码确认过程后更新密码。那么我应该为它添加什么?谢谢。

class UserPasswordSerializer(ModelSerializer):

class Meta:
model = User
fields = [
'password'
]

extra_kwargs = {
"password": {"write_only": True},
}

def update(self, instance, validated_data):
for attr, value in validated_data.items():
if attr == 'password':
instance.set_password(value)
else:
setattr(instance, attr, value)
instance.save()
return instance

最佳答案

我认为使用模型序列化器可能有点过头了。这个简单的序列化器和 View 应该可以工作。

序列化器.py

from rest_framework import serializers
from django.contrib.auth.models import User

class ChangePasswordSerializer(serializers.Serializer):
model = User

"""
Serializer for password change endpoint.
"""
old_password = serializers.CharField(required=True)
new_password = serializers.CharField(required=True)

Views.py

from rest_framework import status
from rest_framework import generics
from rest_framework.response import Response
from django.contrib.auth.models import User
from . import serializers
from rest_framework.permissions import IsAuthenticated

class ChangePasswordView(UpdateAPIView):
"""
An endpoint for changing password.
"""
serializer_class = ChangePasswordSerializer
model = User
permission_classes = (IsAuthenticated,)

def get_object(self, queryset=None):
obj = self.request.user
return obj

def update(self, request, *args, **kwargs):
self.object = self.get_object()
serializer = self.get_serializer(data=request.data)

if serializer.is_valid():
# Check old password
if not self.object.check_password(serializer.data.get("old_password")):
return Response({"old_password": ["Wrong password."]}, status=status.HTTP_400_BAD_REQUEST)
# set_password also hashes the password that the user will get
self.object.set_password(serializer.data.get("new_password"))
self.object.save()
response = {
'status': 'success',
'code': status.HTTP_200_OK,
'message': 'Password updated successfully',
'data': []
}

return Response(response)

return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

关于python - 如何在 Django Rest Framework 中更新用户密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38845051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com