본문 바로가기

Python django

장고 개발 흐름 정리, 그리고 매끄럽게 다듬기!

반응형

 

장고 개발 흐름

출처: 점프투장고 장고개발흐름도

위 그림을 보고 설명해보도록 하겠다.

사용자가 브라우저를 통해 http://localhost:8000/pybo 를 입력하여 해당 서버로 접속한다.

해당 서버로 접속하여 pybo 페이지로 접속하란 의미이다.

사용자로부터 이런 접속 명령을 받게되면 urls.py 의 urlpatterns에 정리된 path를 찾는다.

무엇을 찾냐면? pybo라는 정보를 찾고 뷰 함수의 정보까지 요청 후  뷰 함수는 다시 사용자에게 전달한다.

 

즉 url.py 파일에서 URL과 맵핑되는 뷰 함수를 관리할 수있음을 알 수 있다.

djangProject/url.py의 기본 코드는 다음과 같다.

from django.contrib import admin
from pybo import views

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

 

위 그림 처럼 pybo라는 페이지를 요청하기 위해서는 다음과 같이 수정한다.

from django.contrib import admin
from django.urls import path
from pybo import views #1. 추가 
#1.추가의 설명: pybo/ URL이 요청되면 views.index를 호출하라는 매핑을 urlpatterns에 추가하였다.

urlpatterns = [
    path('admin/', admin.site.urls),
    path('pybo/', views.index), #2. 추가 
    #2. 추가의 설명: views.index는 views.py 파일의 index 함수를 의미한다.
]

 

urlpatterns에 실제 URL은 http://localhost:8000/pybo 이지만 호스트명과 포트가 생략된 pybo/로 매핑해야한다.

왜냐면 호스트(localhost)와 포트(8000)는 서버가 어떤 환경에서 실행되는지에 따라 변하기 때문이다.

 

또 한가지 pybo/  pybo라고 하지 않고 뒤에 슬래시(/)를 하나 더 붙여 주었다. 이렇게 뒤에 슬래시를 붙여주면 브라우저 주소창에 http://localhost:8000/pybo 라고 입력해도 자동으로 http://localhost:8000/pybo/ 처럼 변환된다. 이렇게 되는 이유는 URL을 정규화하는 장고의 기능 때문이다. 특별한 경우가 아니라면 URL 매핑시 항상 끝에 슬래시를 붙여 주도록 하자.

 

 

url.py에서 접속하면 어디로 가라! 라는 이정표와 같은 urlpatterns를 정리하였다.

( pybo/ 의 views.py의 index 함수로 가라)

 

그렇다면 pybo/views.py에 접속하여 index함수가 실행될 수있도록 만들어줘야한다.

아래와 같은 코드를 작성한다.

from django.http import HttpResponse #추가1
#추가1의 설명: HttpResponse는 요청 페이지에 대한 응답을 할때 사용하는 장고 클래스이다. 

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

HttpResponse는 요청 페이지에 대한 응답을 할때 사용하는 장고 클래스이다.

여기서는 "안녕하세요 pybo에 오신것을 환영합니다." 라는 문자열을 브라우저에 출력하기 위해 사용되었다.

index 함수의 매개변수 request는 장고에 의해 자동으로 전달되는 HTTP 요청 객체이다. request에 대해서는 조금 후에 더 자세히 알아보자.

이제 다시 가장 위에 첨부된 장고개발 흐름도를 보면 이해가 될 것이다.

 

하지만 이런 흐름은 프로젝트를 운영함에 있어 다소 불편할 수있다. 이유는 우리 사이트는 pybo만 만들 것이 아니기 때문이다.

pybo는 프로젝트 중 하나일 뿐이다. 따라서 각 프로젝트마다 url을 관리 할 수 있도록 할 것이다.

그리고 config(djangoProject)/urls.py는 앱이 아닌 전체 프로젝트 성격의 파일이므로 이 곳에서는 프로젝트 성격의 URL 매핑만 추가되어야 한다.

 

config(djangoProject)/urls.py를 다음처럼 수정한다.

[파일이름: c:\projects\mysite\config\urls.py]

from django.contrib import admin
from django.urls import path, include
#from pybo import views  # 더 이상 필요하지 않으므로 삭제

urlpatterns = [
    path('admin/', admin.site.urls),
    #path('pybo/', views.index),
    path('pybo/', include('pybo.urls')), #pybo.urls를 인클루드하라!
]

pybo 프로젝트에는 urls.py가 존재하지 않으므로 새로 만들어줘야한다. 그리고 다음과 같이 작성한다.

[파일이름: C:\projects\mysite\pybo\urls.py]

from django.urls import path
from . import views

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

기존과는 별차이 없지만 중간에 pybo URL을 관리 해줄 수 있는 urls.py가 생성된것 뿐이다.

 

 

 

 

http://localhost:8000/pybo 페이지를 요청하면, 프로젝트 URL을 관리하는 config/urls.py에 접속한다.

include된 pybo.urls가 확인되었다. pybo 폴더내 urls.py로 접속한다.

사용자 요청이 pybo까지였으므로 pybo/urls.py에서 마무리된다. 만약 사용자 요청사항이

http://localhost:8000/pybo

/test 였다면,  pybo/urls.py의 urlpatterns 에 값을 추가로 입력해주면 된다.

 

 

 

 

해당 글은 위키독스의 점프투장고 개발 장고의 내용 이해를 돕기 위해 작성된 포스팅입니다.

반응형