TIL

23.05.01 TIL

best_spear_man 2023. 5. 1. 21:38

오늘은...

1. 개인과제 해설 강의

2. 페어프로그래밍(링크)

를 하고 밀린 강의 내용등을 정리하였다.

 

1. 개인과제 해설 강의 정리

1-1. 글 상세보기/리스트보기 같이 처리하기

def get(self, request, todo_id=None)

default parameter를 이용하면, 해당 인자를 넘겨주지 않는 경우에도 에러가 발생하지 않고 처리가 가능하다. 이후 if문을 이용해 None이면 전체 글의 리스트를 조회하고 todo_id가 자연수이면 해당 글을 상세보기하는 식으로 구현할 수 있다.

 

 

1-2. View 작성 팁: 주석과 return response로 시작하기

class UserView(APIView):
    def post(self, request):
    	'''
        회원 가입(email, password, password2, name, age, gender, introduction)
        '''
        return Response("가입성공", status=status.HTTP_200_OK)

    def delete(self, request):
        '''
        회원 탈퇴
        '''
        return Response("탈퇴성공", status=status.HTTP_204_NO_CONTENT)

위와 같이 틀을 짜 두고 진행하면 더 수월하게 만들 수 있다.

1-3. is_valid()의 사용

is_valid()는 serializer에서 입력된 데이터가 모델에 저장될 수 있는 유효한 형태인지 확인해 True/False로 반환하는 메소드이다. 이 메소드는 다음과 같이 두가지 방식으로 사용할 수 있다.

  • Serializer.is_valid(raise_exception=True)
    이 방식을 사용하면 유효하지 않은 값에 의해 오류가 발생할 시 바로 함수실행이 중지된다. (서버 자체가 중지되지는 않는다.) 그리고 serilaizers.ValidationError exception가 발생하는데, 이는 http 400 bad request 응답을 반환할 것이다.
  • If Serializer.is_valid()
    이 방식을 사용하면 유효하지 않은 값에 의해 오류가 발생해도 함수가 바로 실행중지되지 않으며, 따라서 오류가 발생시에도 원하는 추가 동작을 한 뒤 함수를 종료시킬 수 있다.

1-4. extra_kwargs

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['email', 'username', 'password']
        extra_kwargs = {'password': {'write_only': True}}

serializer에서 특정 필드를 post 요청 시에만 사용 하고 싶을 수 있다. 예를 들어 비밀번호와 같은 필드는 작성할 때만 필요하고, 조회를 할때는 보내서는 안된다. 이때 위와같이 extra_kwargs에 위와 같이 플래그를 설정해 놓으면 적용된다.

 

위와같이 필수로 입력해야 하는 필드가 검증 하기전에 입력될 수 없는 필드일 경우에는 extra_kwargs를 이용해 검증에서 제외할 수 도 있다.

1-5. 회원정보 삭제 없이 회원탈퇴의 구현 

회원탈퇴를 구현할 때, 보통 유저 정보 삭제를 바로 하지는 않는다. 유저 정보를 바로 삭제해버리면, 탈퇴한 유저가 정보 조회 문의등을 하였을 때 매우 곤란할 수 있다. 따라서 보통 is_active 필드를 False로 변경하고, 일정 기간이 지난 후 정보를 삭제하는 것이 보편적이다.

def delete(self, request):
    user = request.user
    user = User.objects.get(id=user.id)
    # user.delete()
    user.is_active=False
    user.save()
    return Response(
        {"message": "탈퇴성공"}, status=status.HTTP_204_NO_CONTENT
    )

 

2. 페어프로그래밍- 링크

 

배운점

  1. 실제 서비스 구현시의 탈퇴 처리
  2. is_valid()의 다른 사용법
  3. Default parameter의 구체적인 활용사례
  4. extra-kwargs의 사용

레퍼런스

https://hoorooroob.tistory.com/entry/DRF-Validation-Raising-an-exception-on-invalid-data

 

[해설과 함께 읽는 DRF 문서] Validation - Raising an exception on invalid data

.is_valid() 메소드는 부가적으로 raise_exception 플래그를 사용할 수 있는데, 이것을 사용하는 경우에 유효성 에러가 발생한다면,serilaizers.ValidationError exception을 발생 시킬 것이다 이러한 exception은 REST

hoorooroob.tistory.com