#앱(APP) 생성
# 앱 생성
django-admin startapp 파일이름
#http://127.0.0.1:8000/pybo 요청 시 Hello, Django 출력하기
위 url 로 접속해보면 다음과 같은 화면을 만나게 된다.
장고에서 오류가 발생하면 자세히 설명을 해주기 때문에 비교적 해결하기가 쉽다.
#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) 는 서버가 어떤 환경에서 실행되는 지에 따라 변하기 때문이다.
또 한가지 pybo/ 를 pybo 라고 하지 않고 뒤에 슬래시 (/) 를 하나 더 붙여줬다. 이렇게 뒤에 슬래시를 붙여주면 브라우저 주소창에 https://localhost:8000/pybo 라고 입력해도 자동으로 http://localhost:8000/pybo/8000 처럼 변환된다.
이렇게 되는 이유는 URL 을 정규화하는 장고의 기능 때문이다. 특별한 경우가 아니라면 URL 매핑시 항상 끝에 슬래시를 붙여주자.
다시 http://localhost:8000/pybo 페이지를 요청해보자.
그러면 ‘사이트에 연결할 수 없음’ 이라는 오류가 화면에 표시될 것이다.
오류의 원인은 URL 매핑에 추가한 뷰 함수 views.index 가 없기 때문이다.
#views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("안녕하세요 pybo에 오신 것을 환영합니다.")
#장고 개발 흐름 정리하기
1) 브라우저에서 로컬 서버로 http://localhost:8000/pybo 페이지를 요청하면
2) urls.py 파일에서 /pybo URL 매핑을 확인하여 views.py 파일의 index 함수를 호출하고,
3) 호출한 결과를 브라우저에 반영한다.
#URL 분리하기
pybo 앱에 관련된 것들은 pybo 앱 디렉터리 하위에 위치해야한다.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('pybo/', include('pybo.urls'))
]
pybo/ URL 에 대한 매핑을 path(’pybo/’, view.index) 에서 path(’pybo/’, include(’pybo.urls’)) 로 수정했다.
path(’pybo/’, include(’pybo.urls’)) 의 의미
: pybo/ 로 시작하는 페이지를 요청하면 이제 pybo/urls.py 파일의 매핑 정보를 읽어서 처리하라는 의미이다.
따라서 이제 pybo/question/create, pybo/answer/create 등의 pybo/ 로 시작하는 URL 을 추가해야할 때 config/urls.py 파일을 수정할 필요 없이 pybo/urls.py 파일만 수정하면 된다.
#pybo/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
]
즉, 'pybo/' URL 은 다음처럼 config/urls.py 파일에 매핑된 pybo/ 와 pybo/urls.py 파일에 매핑된 '' 이 더해져 pybo/ 가 된다.
config/urls.py | pybo/urls.py | 최종 URL |
'pybo/' | '' | 'pybo/' |
'pybo/' | 'question/create/' | 'pybo/question/create/' |
📖 참고자료
[Django] 질문 목록 및 상세 페이지 만들기 (0) | 2022.09.16 |
---|---|
[Django] 모델(Model) (15) | 2022.09.15 |
[Django] 장고 관리자 (admin) (1) | 2022.09.15 |
[Django] 일반적인 웹 요청 처리 프로세스 (0) | 2022.09.06 |
[Django] 장고 입문 (0) | 2022.09.04 |