Study/Django

[Django] URL과 View (5)

taecongs 2023. 9. 8. 13:10

Django 공부하기 ✨
참고 사이트 : 파이보 (점프 투 장고)


Django에서 URL과 View란?

(1) URL
    • URL은 웹 페이지나 리소스를 식별하는 데 사용되는 문자열이다.
    • 장고에서 URL은 웹 애플리케이션의 각 뷰(View)에 연결되어 요청된 URL에 따라 적절한 뷰(View)가 호출된다.
(2) View
    • 뷰는 URL에 응답하기 위한 Python 함수이다.
    • 장고에서 뷰 함수는 URL 패턴과 연결되어 특정 URL 요청에 대한 응답을 처리한다.
    • 뷰 함수는 HTTP 요청을 받고, 데이터를 처리하거나 템플릿을 렌더링하여 클라이언트에게 응답을 반환한다.

 

(1) 앱(App)

  • mysite 프로젝트를 생성한 상태이다. 하지만 프로젝트 단독으로는 아무런 일도 할 수 없다. 
  • 프로젝트에 기능을 추가하기 위해서는 앱(App)을 생성해야 한다.
  • 명령 프롬프트(cmd)에서 django-admin의 startapp 명령을 이용하여 pybo 앱을 생성하자.
// (1) pybo 앱 생성하기
(mysite) C:\projects\mysite>django-admin startapp pybo
  • 명령을 실행하면 아무런 메시지 없이 종료된다.
  • 하지만 pybo 앱 관련한 파일과 디렉터리가 생성되었음을 확인할 수 있다.
  • C:\projects\mysite로 디렉터리 이동 -> gitbash 에서 .code -> 비주얼 스튜디오 코드 실행

 

// (2) 가상 환경 진입하기
C:\projects\mysite>mysite


// (3) 로컬 서버 실행하기
(mysite) C:\projects\mysite>python manage.py runserver

 

(2) Hello Pybo

  • 브라우저에서 http://localhost:8000/pybo 페이지 요청

  • 브라우저가 요청한 페이지를 찾을 수 없을 경우에 발생하는 404 에러 발생한다.
  • 오류를 해결하기 위해서는 config/urls.py 파일에 pybo/ URL에 대한 매핑을 추가해야 한다.

 

(3) urls.py

  • URL 매핑을 추가하기 위해 urls.py 파일을 수정해야 한다.
// (4) config/urls.py 파일 수정하기
from django.contrib import admin
from django.urls import path

from pybo import views                 // 추가된 코드

urlpatterns = [
    path('admin/', admin.site.urls),
    path('pybo/', views.index),        // 추가된 코드
]
  • pybo/ URL이 요청되면 views.index를 호출하라는 매핑을 urlpatterns에 추가하였다.
  •  views.index는 views.py 파일의 index 함수를 의미한다.
  • urlpatterns에서 실제 URL은 http://localhost:8000/pybo 이지만 호스트명과 포트가 생략된 pybo/로 매핑해야 한다. 왜냐하면 호스트(예:localhost)와 포트(예:8000)는 서버가 어떤 환경에서 실행되는지에 따라 변하기 때문이다. 

 

(4) views.py

  • 404에러는 발생하지 않지만  "사이트에 연결할 수 없음"이라는 오류가 화면에 표시되는 상태이다.
  • pybo/views.py 파일에 index 함수를 추가해야 한다.
// (5) pybo/views.py 파일 수정하기
from django.http import HttpResponse     // 추가된 코드

def index(request):    // 추가된 코드
    return HttpResponse("안녕하세요 pybo에 오신것을 환영합니다.")

 

(5) 장고 개발 흐름 정리하기

  1. 브라우저에서 로컬 서버로 http://localhost:8000/pybo 페이지를 요청
  2. urls.py 파일에서 /pybo URL 매핑을 확인하여 views.py 파일의 index 함수를 호출
  3. 호출한 결과를 브라우저에 반영

 

(6) URL 분리

  • 현재 상태로는 pybo와 관련된 URL 매핑을 추가할 때마다 config/urls.py 파일을 수정해줘야 한다.
  • 이러한 문제를 해결하기 위해  config/urls.py 파일을 수정해야 한다.
// (6) config/urls.py 파일 수정하기
from django.contrib import admin
from django.urls import path, include     // 수정된 부분


urlpatterns = [
    path('admin/', admin.site.urls),
    path('pybo/', include('pybo.urls')),  // 수정된 부분
]
  • path('pybo/', include('pybo.urls'))의 의미는 pybo/로 시작하는 페이지를 요청하면 이제 pybo/urls.py 파일의 매핑 정보를 읽어서 처리하라는 의미이다.
  • 그러므로 pybo/urls.py 파일을 생성해야 한다.
// (7) pybo/urls.py 생성하기
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index),
]
  • path('', views.index) 처럼 pybo/ 가 생략된 ' ' 이 사용되었다. 이렇게 되는 이유는 config/urls.py 파일에서 이미 pybo/로 시작하는 URL이 pybo/urls.py 파일과 먼저 매핑되었기 때문이다.
  • 즉, pybo/ URL은 다음처럼 config/urls.py 파일에 매핑된 pybo/  pybo/urls.py 파일에 매핑된 ' ' 이 더해져 pybo/가 된다.
  • 오류가 발생한다면 로컬 서버를 재시작 해야 한다.