Django

Chapter 10-4 Django DetailView로 사용자 프로필 조회하기

Chansman 2025. 5. 15. 15:53

👤 Django DetailView로 사용자 프로필 조회하기


1️⃣ 코드 예시

# member/views.py

class UserProfileView(DetailView):
    model = User
    template_name = 'profile/detail.html'
    slug_field = 'nickname'
    slug_url_kwarg = 'slug'
    queryset = User.objects.all().prefetch_related('post_set', 'post_set__images')

2️⃣ 핵심 속성 설명

🔹 slug_field = 'nickname'

  • URL에서 사용할 슬러그(slug)가 User 모델의 nickname 필드임을 지정합니다.
  • 즉, 닉네임을 기준으로 특정 사용자를 조회하겠다는 의미입니다.

🔹 slug_url_kwarg = 'slug'

  • URLconf에서 <slug:slug>로 전달되는 값을 nickname 필드와 매칭합니다.
  • slug라는 이름의 URL 파라미터를 받아와 조회에 활용합니다.

🔹 queryset = ... .prefetch_related(...)

  • User 객체를 가져올 때 해당 사용자의 post_set과 post_set에 연결된 images를 미리 불러옵니다.
  • 성능 최적화를 위한 쿼리 캐싱(preloading) 방식

💡 작동 흐름 예시

상황 설명

사용자가 /profile/johndoe/ 방문 URLConf에서 <slug:slug>로 slug='johndoe' 전달됨
View 내부 처리 User.objects.get(nickname='johndoe')와 동일한 효과
결과 johndoe의 프로필 정보 + 작성한 게시글 + 이미지 목록이 한 번에 로딩됨

📌 URL 패턴 예시

# urls.py
path('profile/<slug:slug>/', UserProfileView.as_view(), name='user_profile')

✅ 정리 요약

속성 역할 예시

slug_field 모델의 어떤 필드와 URL을 매칭할지 지정 'nickname'
slug_url_kwarg URL에서 어떤 키 이름으로 받을지 지정 'slug'
queryset.prefetch_related() 성능 최적화 게시물 + 이미지 미리 로딩

DetailView를 통해 프로필 페이지 구현 시, slug 기반 접근을 통해 깔끔하고 읽기 쉬운 URL을 제공할 수 있으며,
성능까지 고려한 효율적인 쿼리 작성이 가능합니다 🚀