Django

Chapter 11-2 Django 인스타그램 프로젝트 - 검색 기능 구현 정리

Chansman 2025. 5. 16. 15:37

📌 Django 인스타그램 프로젝트 - 검색 기능 구현 정리


✅ 검색 기능 개요

search() 뷰는 사용자가 입력한 검색 조건에 따라 사용자 닉네임 또는 게시글 태그를 기준으로 검색 결과를 필터링하여 반환합니다.


🧱 뷰 함수 코드 구조 (post/views.py)

from django.contrib.auth import get_user_model
User = get_user_model()

@csrf_exempt
@login_required()
def toggle_like(request):
    ...  # 좋아요 처리 로직 (생략)

# 검색 처리 뷰
def search(request):
    search_type = request.GET.get('type')  # 'user' 또는 'tag'
    q = request.GET.get('q', '')

    if search_type in ['user', 'tag'] and q:
        if search_type == 'user':
            object_list = User.objects.filter(nickname__icontains=q)
        else:
            object_list = Post.objects.filter(tags__tag=q)

        context = {
            'object_list': object_list
        }
        return render(request, f'search/search_{search_type}.html', context)

    return render(request, 'search/search.html')

🔍 상세 설명

항목 설명

request.GET.get('type') 검색 타입 구분: 'user' 또는 'tag'
request.GET.get('q') 검색어 입력값 (기본값은 빈 문자열)
nickname__icontains=q 대소문자 구분 없이 닉네임 포함 검색 (User 모델)
tags__tag=q 태그 문자열이 일치하는 Post 검색 (ManyToMany 필드 기준)

📁 템플릿 분기 처리

return render(request, f'search/search_{search_type}.html', context)
  • 검색 타입에 따라 템플릿이 다음과 같이 분리됩니다:
    • search/search_user.html: 사용자 검색 결과
    • search/search_tag.html: 태그 기반 게시물 검색 결과

✅ search.html (초기화면)

<!-- search/search.html -->
<form method="get" action="/search/">
  <input type="text" name="q" placeholder="검색어를 입력하세요">
  <select name="type">
    <option value="user">사용자</option>
    <option value="tag">태그</option>
  </select>
  <button type="submit">검색</button>
</form>

💡 확장 아이디어

기능 설명

AJAX 검색 입력 도중 자동 완성 기능 구현 가능 (js 기반)
검색 히스토리 저장 최근 검색어 캐시 또는 DB에 저장 후 추천 기능
인기 검색어 검색된 횟수를 기준으로 랭킹화 가능
해시태그 클라우드 자주 등장하는 태그를 시각적으로 보여주기

🧠 요약

항목 설명

type 파라미터 'user' 또는 'tag' 검색 타입 지정
q 파라미터 검색어 문자열 입력
검색 대상 User.nickname 또는 Post.tags.tag
결과 템플릿 search_user.html, search_tag.html 분기 처리

검색 기능은 단순한 필터링부터 시작해, 추천 시스템이나 인기 키워드 분석 등으로 확장할 수 있습니다. 시작은 단순하게, 확장은 전략적으로 💡