기술블로그-Django편
📌 Django reverse() 호출부터 뷰 실행까지 전체 실행 흐름
Chansman
2025. 5. 7. 14:21
📌 Django reverse() 호출부터 뷰 실행까지 전체 실행 흐름
✅ 사용 예시 코드
@login_required
def blog_create(request):
...
return redirect(reverse('blog_detail', kwargs={'pk': blog.pk}))
🧭 1. 전체 실행 순서 흐름 요약
1️⃣ 사용자 POST 요청 → /blog/create/
- 사용자가 블로그 글을 작성하고 폼을 제출합니다.
2️⃣ form.is_valid() → blog 객체 저장
- 새 블로그 글이 생성되고, 예를 들어 blog.pk == 5
3️⃣ reverse('blog_detail', kwargs={'pk': 5}) 실행
- Django가 urls.py에서 name='blog_detail'을 가진 경로를 찾습니다.
- URL 패턴: path('<int:pk>/', views.blog_detail, name='blog_detail')
- 결과: '/5/'라는 URL 문자열 반환
4️⃣ redirect('/5/')
- 브라우저가 해당 URL로 리디렉션됩니다.
5️⃣ 브라우저가 /5/ 요청 (GET 요청)
- 사용자의 브라우저가 GET /5/ 요청을 서버에 보냅니다.
6️⃣ URLConf 확인 → 해당 뷰 실행
- urls.py에서 <int:pk>/ 패턴이 blog_detail 뷰와 연결됨
- 최종적으로 아래 코드 실행:
def blog_detail(request, pk):
...
🔁 실행 흐름 다이어그램
[사용자 POST 요청 → /blog/create/]
↓
[뷰에서 blog 객체 생성 → blog.pk = 5]
↓
[reverse('blog_detail', kwargs={'pk': 5}) → '/5/']
↓
[redirect('/5/')]
↓
[브라우저가 /5/로 이동 (GET 요청)]
↓
[urls.py → path('<int:pk>/', views.blog_detail)]
↓
[blog_detail(request, pk=5) 실행]
✅ 핵심 개념 정리
항목 설명
reverse() | URL 이름 → 실제 URL 문자열 반환 |
kwargs={'pk': blog.pk} | URL 패턴의 <int:pk> 변수에 값 전달 |
redirect() | 해당 URL로 브라우저를 이동시킴 |
urls.py | URL 경로와 뷰 함수를 연결하는 역할 |
뷰 함수 | URL에 전달된 pk를 받아 해당 로직 처리 |
이런 구조 덕분에 Django에서는 뷰 간 이동, 객체 조회가 깔끔하고 자동화됩니다.
reverse()는 URL을 하드코딩하지 않고도 안전하게 참조할 수 있게 해 주는 핵심 도구입니다! 😉