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

2025. 5. 16. 15:37·Django

📌 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 분기 처리

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

'Django' 카테고리의 다른 글

Chapter 11-4 Django에서 네이버 OAuth2 로그인 구현하기  (0) 2025.05.16
Chapter 11-3 Django OAuth2 완전 정복 - 인증과 권한 부여의 표준 프레임워크  (0) 2025.05.16
Chapter 11-1 Django 인스타그램 프로젝트 - 팔로워 / 팔로잉 목록 모달 구현하기  (0) 2025.05.16
Chapter 10-5 팔로우 모델과 사용자 친화적 출력 기능  (0) 2025.05.15
Chapter 10-4 Django DetailView로 사용자 프로필 조회하기  (0) 2025.05.15
'Django' 카테고리의 다른 글
  • Chapter 11-4 Django에서 네이버 OAuth2 로그인 구현하기
  • Chapter 11-3 Django OAuth2 완전 정복 - 인증과 권한 부여의 표준 프레임워크
  • Chapter 11-1 Django 인스타그램 프로젝트 - 팔로워 / 팔로잉 목록 모달 구현하기
  • Chapter 10-5 팔로우 모델과 사용자 친화적 출력 기능
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (794) N
      • Python (32)
      • 프로젝트 (113)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154) N
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    lawsuitculture
    college reunions
    youngprofessionals
    classaction
    smartphonedurability
    trumpmuskclash
    btscomeback
    americanlaw
    livebroadcast
    americaparty
    remittance
    RM
    hotcoffeecase
    homebartrend
    life reflection
    basalcellcarcinoma
    chatgpterror
    travel ban
    btsreunion
    btsdischarge
    self-growth
    urbantrends
    titaniumcase
    newpoliticalparty
    gpterror
    chinanightlife
    bts
    btsjungkook
    뷔
    global politics
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 11-2 Django 인스타그램 프로젝트 - 검색 기능 구현 정리
상단으로

티스토리툴바