Django

Chapter 1-7 Django - 가짜 데이터베이스로 웹 페이지 만들기 튜토리얼

Chansman 2025. 4. 29. 17:24

🎬 Django - 가짜 데이터베이스로 웹 페이지 만들기 튜토리얼


📌 튜토리얼 핵심 요약

이 튜토리얼은 가짜 데이터베이스를 활용하여 영화 순위 목록을 만들고, 각 영화의 상세 페이지로 연결하는 방법을 안내합니다. 핵심은 리스트 컴프리헨션과 enumerate를 사용하여 데이터를 효율적으로 처리하고, URL 패턴을 설정하여 각 영화에 대한 상세 페이지를 구현하는 것입니다. 또한, 예외 처리를 통해 404 오류를 적절히 처리하여 사용자 경험을 개선하는 방법을 제시합니다.


1️⃣ 가짜 데이터베이스 구성하기

# 가짜 데이터베이스 (영화 목록)
movie_list = [
    {"title": "파묘", "director": "장재현"},
    {"title": "원카", "director": "홍길동"},
    {"title": "균", "director": "김철수"},
    {"title": "시민", "director": "이영희"},
    {"title": "더키", "director": "박민수"}
]

✅ 주제는 자유롭게 변경 가능 (애니메이션, 게임 등) ✅ 두 가지 이상의 값을 가진 구조 (예: 타이틀, 디렉터)


2️⃣ 목록 페이지 만들기 (리스트 컴프리헨션 활용)

from django.http import HttpResponse

def movie_titles(request):
    titles = [movie["title"] for movie in movie_list]
    response_text = "<br>".join(titles)
    return HttpResponse(response_text)

✅ 리스트 컴프리헨션으로 간단하게 타이틀만 출력 ✅ <br>로 줄바꿈하여 출력 ✅ URL 패턴에 등록하여 /movies/ 접속 시 목록 출력

# urls.py
path('movies/', movie_titles)

3️⃣ 상세 페이지 구현 및 에러 처리

from django.http import Http404

def movie_detail(request, index):
    if index >= len(movie_list):
        raise Http404("페이지를 찾을 수 없습니다.")
    movie = movie_list[index]
    response_text = f"<h1>{movie['title']}</h1><p>감독: {movie['director']}</p>"
    return HttpResponse(response_text)

✅ 인덱스를 URL에서 받아 해당 영화 정보 출력 ✅ 존재하지 않는 인덱스 접근 시 404 에러 발생 ✅ 400번대(클라이언트 잘못)와 500번대(서버 잘못) 에러 구분 강조

# urls.py
path('movie/<int:index>/', movie_detail)

4️⃣ 목록에서 상세 페이지로 이동 (클릭 기능 추가)

def movie_titles_with_link(request):
    links = [
        f'<a href="/movie/{index}/">{movie["title"]}</a><br>'
        for index, movie in enumerate(movie_list)
    ]
    response_text = "".join(links)
    return HttpResponse(response_text)

✅ enumerate로 인덱스와 타이틀을 함께 가져오기 ✅ <a> 태그로 각각의 상세 페이지로 이동 링크 생성 ✅ 줄바꿈 <br> 추가로 깔끔한 출력

# urls.py
path('movies_with_link/', movie_titles_with_link)

5️⃣ 리스트 컴프리헨션 + Enumerate 심화 사용

def movie_titles_optimized(request):
    response_text = "<br>".join(
        f'<a href="/movie/{index}/">{movie["title"]}</a>'
        for index, movie in enumerate(movie_list)
    )
    return HttpResponse(response_text)

✅ 리스트 컴프리헨션 안에 enumerate 바로 활용 ✅ 더 간결하고 깔끔한 코드 작성 가능 ✅ 최종적으로 깔끔한 링크 목록 완성


✅ 최종 요약

  • 데이터베이스 없이 리스트/딕셔너리로 간단한 웹앱 구현 가능
  • URLconf를 활용하여 목록과 상세 페이지를 구분하여 처리
  • 404 오류를 명확히 처리하여 사용자 경험 개선
  • enumerate와 리스트 컴프리헨션을 활용해 코드 최적화 가능

👉 이 튜토리얼을 통해 Django에서 웹 페이지 구성의 기본과 데이터 출력 흐름을 마스터할 수 있습니다! 🚀