1. ✅ URLs (또는 Routes)란?
- 사용자가 접근할 수 있는 경로(Route)를 정의
- 하나의 Django 프로젝트는 다양한 URL을 가질 수 있으며, 각각의 URL에 다른 응답(views) 이 매핑됨
- URLConf(urls.py)에서 URL 패턴을 등록하고 해당 URL에 맞는 뷰(view)로 연결
2. ✅ Views란?
- URL에 대한 처리 로직을 담은 함수 또는 클래스
- 요청(request)을 받아 데이터를 처리하고 응답(response)을 생성
- View의 주요 역할:
- 데이터 불러오기 / 가공
- 비즈니스 로직 수행
- HTML, JSON 등 응답 생성 및 반환
def my_view(request):
# 요청 처리 로직
return HttpResponse("Hello!")
Django에서는 function-based view와 class-based view 모두 지원
3. ✅ URL과 View 연결 흐름
Client Request
↓
URLConf (urls.py)
↓
View 함수 실행
↓
HttpResponse 반환
↓
Client 화면 출력
4. ✅ Redirects (리다이렉트)
- 사용자를 다른 URL로 이동시키는 방법
- 주로 다음과 같은 경우에 사용:
- 잘못된 접근을 정상 경로로 유도
- 입력값 유효성 검사 후 다른 페이지로 이동
방법
from django.http import HttpResponseRedirect
from django.urls import reverse
# 방법 1: 직접 URL 입력
return HttpResponseRedirect("/challenges/january")
# 방법 2: reverse() 사용 - 더 유연함
return HttpResponseRedirect(reverse("month-challenge", args=["january"]))
reverse() 함수
- URL name을 기반으로 실제 URL 문자열을 역으로 찾아줌
- URL이 변경되어도 name만 유지하면 그대로 사용 가능 → 유지보수 편리
5. ✅ 동적 View 처리 (예시)
def index(request):
list_items = ""
months = list(monthly_challenges.keys())
for month in months:
capitalized_month = month.capitalize()
month_path = reverse("month-challenge", args=[month])
list_items += f"<li><a href=\"{month_path}\">{capitalized_month}</a></li>"
response_data = f"<ul>{list_items}</ul>"
return HttpResponse(response_data)
- monthly_challenges 딕셔너리 기반으로 월(month) 리스트를 동적으로 생성
- <ul>, <li> 태그를 코드로 자동 생성 → 유지보수 및 확장에 유리
6. ✅ urlpatterns 예시
def index(request):
list_items = ""
months = list(monthly_challenges.keys())
for month in months:
capitalized_month = month.capitalize()
month_path = reverse("month-challenge", args=[month])
list_items += f"<li><a href=\"{month_path}\">{capitalized_month}</a></li>"
response_data = f"<ul>{list_items}</ul>"
return HttpResponse(response_data)
- /challenges/1 → 숫자로 월을 받아 처리
- /challenges/january → 문자열로 처리
- URL name을 지정하여 reverse 함수에서 사용 가능
7. ✅ 하드코딩의 문제점 vs reverse()의 장점
하드코딩reverse() 사용
| URL 변경 시 코드 전체 수정 필요 | URL name만 유지하면 됨 |
| 버그 가능성 증가 | 유지보수 용이 |
| 협업 시 혼동 우려 | 명시적이고 재사용 가능 |
📝 정리 한줄 요약
- URL은 웹 경로를 정의하고, View는 그 경로에 대한 로직을 실행
- Redirect는 다른 URL로 자동 이동시킬 때 사용
- reverse()를 활용해 URL 하드코딩을 피하고, 템플릿에서는 {% url %}과 같이 사용
'Programming > Django' 카테고리의 다른 글
| [Python Django] The Practical Guide - Data & Models (4) | 2025.07.22 |
|---|---|
| [Python Django - The Practical Guide] 장고로 블로그 만들기 프로젝트 (기초) (7) | 2025.07.21 |
| [Django] 1. 폴더 구조, App 생성, runserver 실행까지 (1) | 2025.07.20 |
| [Python Django - The Practical Guide] Templates & Static Files (2) | 2025.07.18 |
| [Django] 템플릿에서 정적 파일(static file) 경로를 동적으로 만드는 방법 (0) | 2025.07.18 |