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을 제공할 수 있으며,
성능까지 고려한 효율적인 쿼리 작성이 가능합니다 🚀