23.05.01 TIL
오늘은...
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. 페어프로그래밍- 링크
배운점
- 실제 서비스 구현시의 탈퇴 처리
- is_valid()의 다른 사용법
- Default parameter의 구체적인 활용사례
- 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