인증코드 및 비밀번호 검증
from django.contrib.auth.hashers import check_password from . import validated
# 인증코드 비교 if not check_password(request.data['auth_code'] ,owner.password): return Response({"message": "비밀번호가 일치하지 않습니다."}, status=status.HTTP_401_UNAUTHORIZED) # 변경하고자 하는 비밀번호가, 기존의 비밀번호와 일치할 경우 elif check_password(request.data['password'],owner.password): return Response({"message": "기존의 비밀번호로 변경할 수 없습니다."}, status=status.HTTP_400_BAD_REQUEST) # 비밀번호 검증 모듈의 반환값이 True가 아닐경우 if True != validated.validated_password(request.data['password']): return Response({"message": "비밀번호가 올바르지 않습니다."}, status=status.HTTP_400_BAD_REQUEST)
validated : 검증 데이터의 모듈 관리
class UserBookMark(APIView):
"""북마크 조회, 사용자 북마크 등록 여부 확인 ,등록 및 취소,"""
# 챌린지에 북마크 등록한 유저 정보 뽑아오기
def get(self,request,challenge_id):
....
# 사용자가 챌린지에 북마크 등록 되어있는지 판단
def post(self, request,challenge_id):
challenge = get_object_or_404(Challenge, id=challenge_id)
user = get_object_or_404(User,id=request.user.id)
if challenge in user.bookmark.all():
""" user 오브젝트에 challenge 오브젝트가 있는지 판단"""
else :
...
북마크에 등록된 사용자 정보 뽑기
def get(self,request,challenge_id): challenge = get_object_or_404(Challenge,id=challenge_id) serializer = GetBookmarkUserInfo(challenge) return Response(serializer.data,status=status.HTTP_200_OK)
- serializer에 challge 오브젝트 반환
Serializer
class UserProfileSerializer(serializers.ModelSerializer): class Meta: model = User fields = ("profile_image","username",'id')
- 북마크 정보 리스트를 뽑아내며
user 정보를 담아낼 오브젝트의 필드 리스트 설정class GetBookmarkUserInfo(serializers.ModelSerializer): bookmarking_people = UserProfileSerializer(many=True) bookmarking_people_count = serializers.SerializerMethodField() def get_bookmarking_people_count(self,obj): return obj.bookmarking_people.count() class Meta: model = User fields = ('bookmarking_people','bookmarking_people_count')
- method필드가아닌,
생성한 class를 지정하여 serializer 직렬 변환
- serialzier 클래스의 model 은 User 모델로 정의
views.py에서 전달할 objeect를 challge or post를 통해 북마크 또는 좋아요 팔로우 등의 기능에 응용 할 수 있다.
- 지금껏 역참조 또는 정참조 serialzier method field를 사용해왔지만 , 미리 선언한 serializer 필드를 method 필드처럼 사용하여 원하는 데이터를 추가로 담알낼 수 있다.