1. 장고 앱 만들기
1) 장고 앱이란?
장고 프로젝트에서 여러 개의 앱을 개발하고 관리할 수 있다. “앱”이란? 특정한 기능을 수행하는 웹 어플리케이션을 의미한다. 프로젝트에 기능을 추가하기 위해서는 앱을 생성해야 하므로, 아래를 따라해서 생성하도록 한다.
2) 앱 생성하기
django-admin startapp <앱이름>
위의 명령어를 치면 장고 앱이 생성되게 된다.
2. URL 맵핑하기
브라우저에서 http://localhost:8000/pybo 페이지를 요청했을 때 "안녕하세요 pybo에 오신것을 환영합니다."라는 문자열을 출력하도록 만들어 보자.
python manage.py runserver
해당 명령어를 써서 서버를 구동하도록 한다.
그리고 나서 http://localhost:8000/pybo 페이지를 요청해보면
위와 같이 "Page not found (404)" 라는 오류가 발생한다.
404 오류는 브라우저가 요청한 페이지를 찾을 수 없을 경우에 발생한다.
오류의 내용을 자세히 읽어보면 config/urls.py 파일에 요청한 pybo/ URL에 해당되는 매핑이 없다고 적혀 있다.
1) urls.py
// mysite/projects/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),
]
URL 매핑을 추가하기 위해 config/urls.py 파일을 위와 같이 수정한다.
- from pybo import views : pybo파일에서 views.py파일을 가져온다는 의미이다.
- path('pybo/', : pybo url 경로를 의미한다.
- views.index : pybo/ URL이 요청되면 views.index를 호출하라는 것이다. 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 매핑시 항상 끝에 슬래시를 붙여 주도록 해야 한다.
2) views.py
다시 http://localhost:8000/pybo 페이지를 요청해 보면, "사이트에 연결할 수 없음"이라는 오류가 화면에 표시될 것이다. 오류의 원인은 URL 매핑에 추가한 뷰 함수 views.index가 없기 때문이다.
그렇다면 이제 pybo/views.py 파일에 index 함수를 추가해야 한다.
// mysite/projects/pybo/views.py
from django.httpimport HttpResponse
def index(request):
return HttpResponse("안녕하세요 pybo에 오신것을 환영합니다.")
- HttpResponse는 요청에 대한 응답을 할 때 사용한다. 여기서는 "안녕하세요 pybo에 오신것을 환영합니다." 라는 문자열을 브라우저에 출력하기 위해 사용되었다.
- index 함수의 매개변수 request는 HTTP 요청 객체이다.
위와 같이 하고 나면 아래와 같이 페이지가 나온다.
3) 정리하기
- 브라우저에서 로컬 서버로 http://localhost:8000/pybo 페이지를 요청하면
- urls.py 파일에서 /pybo URL 매핑을 확인하여 views.py 파일의 index 함수를 호출하고
- 호출한 결과를 브라우저에 반영한다.
3. URL 분리하기
config의 urls.py 파일은 앱이 아닌 프로젝트 성격의 파일이므로 이곳에는 프로젝트 성격의 URL 매핑만 추가되어야 한다. 따라서 pybo 앱에서만 사용하는 URL 매핑을 따로 분리해주어야 한다.
// mysite/projects/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/로 시작하는 URL을 추가해야 할 때 config/urls.py 파일을 수정할 필요없이 pybo/urls.py 파일만 수정하면 된다.
1) pybo/urls.py 파일을 생성
// mysite/projects/pybo/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
]
pybo/urls.py 파일을 생성해서 url을 분리하면 그대로 페이지가 구동된다.