2 분 소요

URL&view

이 글은 박응용 님의 wikidocs 의 점프 투 장고 교재를 학습하며 작성한 글 입니다.

django에서 존재하는 요소들 중 URL 과 view 를 실습을 통해 어떤 기능을 하며 어떻게 코드를 구성해야 하는지 알아보자.

저번 글에서 만들었던 django 프로젝트에 이어서 진행해보겠다.

브라우저에서 community 페이지를 요청했을 때 원하는 문구가 나오게 페이지를 구성해보자

아무것도 하지 않은 상태에서 브라우저에서 http://127.0.0.1:8000/community 페이지를 요청해보자.

1

위의 페이지를 마주할 수 있다.

django는 아주 친절한 프레임워크라 에러의 원인을 알려준다.

에러는 404에러로 프로젝트.urls.py 에 URL이 맵핑되어 있지 않으니 페이지를 찾아 올 수 없다는 뜻이다.

django 님께서 원하는대로 urls.py에 맵핑을 해보자

urls.py

프로젝트 폴더에서 urls.py 코드를 수정해보자

from django.contrib import admin
from django.urls import path
from community import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('community/', views.index),
]

우선 해당 앱에서 view를 import해준다.

그리고 urlpatterns 에 path를 추가해준다.

path의 구조는 url 주소와 어떤 기능을 작동할지 함수를 지정해주면 된다.

위의 코드는 views.py 에서 index함수를 사용하겠다는 의미이다.

이제 인덱스 함수를 만들어보자.

views.py

만들어두었던 app 폴더에 진입하여 views.py 파일안에 코드를 작성해보자.

from django.http import HttpResponse


def index(request):
    return HttpResponse("윤정호의 첫 django page")

Httpseponse 는 요청 페이지에 대해 응답 하는 장고 클래스이다.

매개변수 request는 장고에 의해 자동으로 전달되는 HTTP 요청 객체이다.

이제 브라우저에서 http://127.0.0.1:8000/community 주소로 이동하면

2

짜잔 ! 첫 django page를 완성했다.

그런데 문제가 있다.

app(‘community’) 에 대한 url 맵핑이 프로젝트 하위에 존재하는 urls.py 에서 행해졌다는 점이다.

현재 기능에는 문제가 없지만 앱에 관련된 것들은 앱의 하위에 존재하여야 유지보수나 후에 혹시라도 생길 에러를 방지할 수 있다.

URL 을 분리 함으로서 위의 문제를 해결해보자.

URL 분리

project 디렉토리 내의 urls.py 수정

우선 프로젝트 디렉토리에 존재하는 urls.py 를 수정해주자

from django.contrib import admin
from django.urls import path, include
# from community import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('community/', include('community.urls'),
]

django의 urls 클래스에서 include 함수를 import 해준다.

그리고 path 에서 include 함수를 통해 app 디렉토리의 urls.py를 가져온다.

app 디렉토리 내에 urls.py 생성 및 수정

프로젝트/urls.py 에서 작성한 코드대로 app/urls.py 를 로드해올 수 있도록 해당 경로에 urls.py 을 만들어주자.

만든 후 내부에 코드를 작성한다.

from django.urls import path
from . import views

urlpatterns=[
    path('', views.index)
]

우선 urls 클래스에서 path 함수를 가져온 후

from . import view 를 통해 views.py 를 가져온다.

’.’ 이 뜻하는 것은 상대경로를 의미한다.

’.’ 이 하나라면 현재 폴더에서 가져오라는 뜻이며 ‘.’ 의 개수가 늘어남에 따라 상위폴더로 이동하게 된다.

그리고 path 에서 url 을 공백으로 주는 이유는 이미 프로젝트의 urls에서 프로젝트 명으로 맵핑을 해주었기 때문이다.

만약 path(‘community’, views.index) 로 설정해줬다면 우리가 요청해야할 페이지 url은 http://127.0.0.1:8000/community/community 로 맵핑된다.

흐름

간단하게 django의 urls,view 를 통해 흐름을 살펴보자면 이렇다.

  1. 클라이언트 페이지 request
  2. 프로젝트/urls.py 에서 URL 주소를 확인
  3. 확인된 path를 통해 해당 view로 진입
  4. view에서 request를 받아 response 객체 생성
  5. 클라이언트에게 전달

댓글남기기