Skip to main content

Command Palette

Search for a command to run...

get_object_or_404 메서드란?

Updated
2 min readView as Markdown
get_object_or_404 메서드란?

메서드 사용

def get_object(self, pk, user):
    return get_object_or_404(Diary, id=pk, user=user)


def get(self, request, pk):
    diary = self.get_object(pk, request.user)       
    serializer = DiarySerializer(diary)
    return Response(serializer.data)

메서드 사용 안할 때

def get(self, request, pk):
    try:
        diary = Diary.objects.get(id=pk, user=request.user)
        serializer = DiarySerializer(diary)
        return Response(serializer.data)
    except Diary.DoesNotExist:
        return Response({"error": "다이어리를 찾을 수 없습니다."},status=404)

get_object 메서드는 특정 조건에 맞는 Diary(모델) 객체를 가져오거나

해당 객체가 없을 경우 자동으로 404 Not found 응답을 반환하는 역할을 한다.

  • Diary.objects.get 대신 get_object_or_404를 사용한다.

  • 객체를 찾지 못할 경우 get_object_or_404Diary.DoesNotExist 예외를 처리하고
    클라이언트에 404 상태 코드를 자동으로 반환한다.

  • 해당 메서드를 사용하면 여러 곳에서 객체를 가져올 때 공통 로직으로 재사용 가능하고, 코드 중복을 줄일 수 있다.

Django의 get_object_or_404⁠의 작동 방식

  1. 객체를 찾은 경우 : 해당 객체를 반환

  2. 객체를 찾을 수 없는 경우 : 404 예외를 발생시키고, 클라이언트에 404 응답 반환


def get_object(self, pk, user) 를 가져올 때 왜 user 인자를 사용하는가?

user 인자는 인증된 사용자가 자신의 다이어리에만 접근하도록 제한하기 위해 사용

→ Diary 모델에는 작성자를 나타내는 user 필드가 있는데, 이를 이용해 요청을 보낸 사용자가 해당 다이어리의 소유자인지 확인한다. 요청자가 자신의 다이어리가 아닌 곳에 접근하면 이를 차단하기 위해 사용한다.

→ user 인자를 사용하지 않으면 다른 사용자의 다이어리에 접근할 가능성이 생긴다.


다이어리를 찾을 수 없습니다와 같은 커스텀 메세지를 추가하고 싶으면,

  1. try-except를 처리해 원하는 메세지 반환 가능
from django.http import Http404

class DiaryDetailAPIView(APIView):
    permission_classes = [IsAuthenticated]

    def get_object(self, pk, user):
        try:
            return Diary.objects.get(id=pk, user=user)
        except Diary.DoesNotExist:
            raise Http404("다이어리를 찾을 수 없습니다.")
  1. http404에 포함 가능
from django.shortcuts import get_object_or_404
from django.http import Http404

class DiaryDetailAPIView(APIView):
    permission_classes = [IsAuthenticated]

    def get_object(self, pk, user):
        try:
            return get_object_or_404(Diary, id=pk, user=user)
        except Http404:
            raise Http404("다이어리를 찾을 수 없습니다.")
9 views

More from this blog

s3사용 및 s3:PutBucketPolicy 권한 오류

1. S3 생성 중 정책 생성 페이지에서 s3:PutBucketPolicy 권한이 없어 오류 발생 IAM 사용이 아닌 루트 사용자 버전으로 설명 AWS IAM 콘솔 → 정책 → AdministratorAccess⁠검색→ 정책이 나타나면 사용자에 연결→ 없다면 새로운 정책 추가 없으므로 AdministratorAccess 생성 정책 생성 버튼 클릭 → JSON 탭 선택 후 아래 코드 입력 → 생성 { "Version": "2012-10-1...

Mar 12, 20252 min read9
s3사용 및 s3:PutBucketPolicy 권한 오류

챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

https://youtu.be/5soSQgVHGEA OpenAI API를 이용한 챗봇을 만들면서 대화가 길어질수록 LLM 호출 시 토큰 수 증가로 응답 시간이길어지는 문제가 발생 문제분석 여기서 생각하는 문제는 db 조회의 부하 처음 챗봇에게 부여하는 역할이 너무 긴데, 이걸 매 API 호출마다 전송함 대화 흐름을 기억하기 위해 챗봇-유저 간 대화 내용을 모두 DB에 저장한 다음 그대로 API 호출 마다 LLM에 전달함 → 모든 대화 ...

Jan 16, 20253 min read122
챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

dayeon's blog

124 posts