TIL

손성수·2023년 5월 29일
0

인증코드 및 비밀번호 검증

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 : 검증 데이터의 모듈 관리




Bookmark CBV

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 필드처럼 사용하여 원하는 데이터를 추가로 담알낼 수 있다.
profile
더 노력하겠습니다

0개의 댓글

관련 채용 정보