비밀번호 변경(PATCH요청)
PATCH요청을 통한 비밀번호 변경을 구현해봤다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# serializer.py
from rest_framework import serializers
from .models import User
class ChangePasswordSerializer(serializers.Serializer):
password = serializers.CharField(max_length=68, min_length=3)
check_password = serializers.CharField(max_length=68, min_length=3)
def validate(self, attrs):
if attrs['password'] != attrs['check_password']:
raise ValueError
return attrs
def update(self, instance, validated_data):
instance.set_password(validated_data['password'])
instance.save()
return instance
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# accounts/views.py
from rest_framework.generics import GenericAPIView
from .serializers import ChangePasswordSerializer
class UpdatePassword(GenericAPIView):
queryset = User.objects.all()
permission_classes = (permissions.IsAuthenticated,)
serializer_class = ChangePasswordSerializer
lookup_field = 'id'
def patch(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.serializer_class(instance, data=request.data, partial=True)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
return Response(serializer.data)
def perform_update(self, serializer):
serializer.save()
PATCH 메소드 실행.
instance = self.get_object()
- instance.password : 기존 DB 비밀번호
serializer = self.serializer_class(instance, data=request.data, partial=True)
- instance.password : 기존 DB 비밀번호
- 여기서 ChangePasswordSerializer 실행
- 새로운 비밀번호에 대해서 유효성 검사
- instance의 password에 새로운 비밀번호 값이 들어가고, 데이터 직렬화
serializer.is_valid(raise_exception=True)
- instance.password : 기존 DB 비밀번호
self.perform_update(serializer)
- instance.password : DB 비밀번호 변경완료.
- 모델 객체 생성
이 기사는 저작권자의
CC BY 4.0
라이센스를 따릅니다.