기술블로그-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을 하드코딩하지 않고도 안전하게 참조할 수 있게 해 주는 핵심 도구입니다! 😉