본문 바로가기

Django/Django 기초

[Django] 2 - 1. URL과 View

이전 포스트

 

[Django] 1. 개발 환경 설정 https://wroni.tistory.com/4


2 - 1. URL과 View

 

1. 앱(App)

 

프로젝트에 기능을 추가하기 위한 앱을 생성하자

pybo 앱 생성

 

django-admin startapp pybo

 

 

pybo 하위에 여러 파일들이 생성되었다

 

 

2. urls.py 와 views.py

 

로컬 호스트에서 /pybo 페이지 요청하면, "안녕하세요 pybo에 잘 오셨습니다"라는 문자열 출력하도록 해보자

먼저 웹 서버를 구동시키고

 

python manage.py runserver

 

 

로컬호스트에서 /pybo 페이지 요청하면 page not found 뜬다

오류 메세지에는 config.urls에 요청한 pybo에 대한 매핑 없다고 나온다

그렇다면, config/urls/py에 /pybo URL에 대한 매핑 추가하자

 

파일 : C:\projects\mysite\config\urls.py

from pybo import views

path('pybo\', views.index),    #pybo\로 매핑

 

이후에 로컬호스트에서 /pybo 페이지 요청하면 사이트 연결할 수 없음 오류가 뜬다

로컬 서버에서 해당 오류가 뜨고 있다

 

pybo.views 모듈에 index 속성이 없다고 뜬다

 

urls.py에서 views.index를 호출했기 때문에 뜨는 오류이다. views에 index 함수가 없는데 호출하면 오류가 뜨는 게 당연하다.

이제 views에 index 함수 추가하자

 

파일 : C:\projects\mysite\pybo\views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse("안녕하세요 pybo에 잘 오셨습니다.")

 

이제 로컬호스트에 /pybo 페이지 다시 요청해보자

원하는대로 결과가 나오는 것을 확인할 수 있다

 

 

 

3. URL 분리

 

현재 pybo와 관련된 URL 매핑을 추가할 때마다 config\urls.py 파일을 수정해야 한다. 하지만 pybo 앱에서 사용하는 URL 매핑을 config\urls.py에 계속 추가하는 것을 비효율적인 방법이다.

config\urls.py를 수정하고 pybo\urls.py를 생성하자

 

파일 : C:\projects\mysite\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')),
]

 

pybo\ URL 매핑을 views.index에서 include('pybo.urls')로 수정하였다

이제 pybo\로 시작하는 URL을 추가해야 할 때 config/urls.py 파일을 수정할 필요 없이 pybo/urls.py 만 수정하면 된다.

 

이제 pybo/urls.py 파일을 생성하자

pybo 하위에 파일을 생성하려면, pybo 파일에 오른쪽 클릭 후, New -> File을 선택하면 된다.

 

파일 : C:\projects\mysite\pybo\urls.py

from django.urls import path

from . import views

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

path('', views.index)에서 ''를 사용한 이유는 config\urls.py에서 이미 pybo\로 시작하는 URL이 pybo\urls.py 파일과 먼저 매핑되었기 때문

\pybo URL은 config\urls.py 파일에 매핑된 pybo\pybo\urls.py 파일에 매핑된 ''이 더해져서 views.index 함수와 매핑된다. 최종 URL은 'pybo\'

 

URL 분리 후에도 동일한 결과가 나오는지 확인해보자

 

잘 나오고 있다

 


※ 본 내용은 django 공부 기록이며, 점프 투 장고를 참고하였습니다.

https://wikidocs.net/book/4223

 

점프 투 장고

**점프 투 장고 오프라인 책 출간 !! (2020.12)** * [책 구입 안내](https://wikidocs.net/105844)

wikidocs.net