-
TIL 2023.05.01내일배움캠프 2023. 5. 1. 20:26
장고 심화 개인과제가 끝이 났다.
과제 해설 중 새롭게 알게된 것들에 대해 정리해보자.
class TodoListView(APIView): def get(self, request): todo_list = Todo.objects.all() serializer = TodoListSerializer(todo_list, many=True) return Response(serializer.data, status=status.HTTP_200_OK) class TodoDetailView(APIView): def get(self, request, todo_id): todo = get_object_or_404(Todo, id=todo_id) serializer = TodoListSerializer(todo) return Response(serializer.data, status=status.HTTP_200_OK)
여태까진 위 코드처럼 전체 목록을 불러오는 뷰와 상세 정보를 불러오는 뷰를 따로 만들었었는데,
class TodoView(APIView): def get(self, request, todo_id=None): if todo_id: todo = get_object_or_404(Todo, id=todo_id) serializer = TodoListSerializer(todo) else: todo_list = Todo.objects.all() serializer = TodoListSerializer(todo_list, many=True) return Response(serializer.data, status=status.HTTP_200_OK)
위 코드처럼 pk 값을 인자로 받는데 기본값을 None으로 두고, 값이 있다면 상세정보, 없다면 전체 리스트를 불러오게 할 수 있다.
serializer.is_valid(raise_exception=True)
이 문법을 쓰면 굳이 조건문 쓰지 않고도 밸리데이션 실패하면 바로 끝낼 수 있다.
class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = '__all__' extra_kwargs = { "password": { "write_only": True }, }
read_only 혹은 write_only 를 지정해줄 수 있다. 위 코드처럼 비밀번호를 write_only로 지정하면 쓸 때는 값이 필요하지만, 읽을 때는 가져오지 않게 할 수 있다.
def delete(self, request): user = request.user user.is_active = False user.save() return Response(status=status.HTTP_204_NO_CONTENT)
나는 회원 탈퇴 기능을 유저를 데이터베이스에서 삭제시켰는데, 보통 그렇게 하지 않고,
is_active 를 False로 해서 로그인만 못하게 만든다고 한다.
'내일배움캠프' 카테고리의 다른 글
TIL 2023.05.03 (0) 2023.05.03 TIL 2023.05.02 (2) 2023.05.02 WIL 내일배움캠프 7주차 (0) 2023.04.28 TIL 2023.04.28 (0) 2023.04.28 TIL 2023.04.27 (0) 2023.04.27