basic setting

김기훈·2026년 2월 24일

Search

목록 보기
8/9

Django(DRF)

Create

@extend_schema(
        tags=["태그 이름"], summary= "간단 소개", request=시리얼라이저이름
    )
    def post(self, request: Request):
        # 1. 입력 데이터 검증
        serializer = 시리얼라이저이름(data=request.data)
        serializer.is_valid(raise_exception=True)

        # 2. User 타입 지정
        user = cast(User, request.user)

        # 3. 서비스 레이어 호출
        변수명 = 서비스_이름(author=user, validated_data=serializer.validated_data)

        return Response(
            {"id": 변수명.id, "message": "성공적으로 등록되었습니다."},
            status=status.HTTP_201_CREATED,
        )

List

view

  • user 사용시

        # 1. User 타입 지정
        user = cast(User, request.user)
  • 페이지네이션이 필요한 경우

    @extend_schema(tags=["태그 이름"], summary="간단 소개")
    def get(self, request: Request):
        # 1. 서비스 레이어 호출
        변수명 = 서비스_이름()

        # 2. 페이지네이션을 적용
        paginator = self.pagination_class()
        page = paginator.paginate_queryset(변수명, request, view=self)

        if page is not None:
            serializer = 시리얼라이저이름(page, many=True)
            return paginator.get_paginated_response(serializer.data)

        return Response(시리얼라이저이름(변수명, many=True).data)
  • 페이지네이션이 필요 없는 경우

    @extend_schema(tags=["태그 이름"], summary="간단 소개")
    def get(self, request: Request, something_id: int):
        # 1. 서비스 레이어를 호출
        변수명 = 서비스_이름(something_id)

        # 2. 게시글이 없는 경우(None), 커스텀 예외를 발생
        if not post:
            raise BaseCustomException(ErrorMessage.POST_NOT_FOUND)

        return Response(시리얼라이저이름(변수명).data)

Update

	@extend_schema(tags=["태그 이름"], summary="간단 소개", request=시리얼라이저이름)
    def put(self, request: Request, something_id: int):
        # 1. 입력 데이터 검증
        serializer = PostCreateSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        # 2. User 타입 지정
        user = cast(User, request.user)

        # 3. 서비스 레이어 호출
        변수명 = 서비스_이름(
            something_id=something_id, user=user, validated_data=serializer.validated_data
        )

        return Response(
            시리얼라이저이름(서비스_이름().data, status=status.HTTP_200_OK
        )

Patch

Delete

    @extend_schema(tags=["태그 이름"], summary="간단 소개")
    def delete(self, request: Request, post_id: int):
        # 1. User 타입 지정
        user = cast(User, request.user)

        # 2. 서비스 레이어 호출
        서비스_이름(something_id=something_id, user=user)

        return Response(status=status.HTTP_204_NO_CONTENT)
profile
안녕하세요.

0개의 댓글