상세 컨텐츠

본문 제목

[Django] 앱(APP) 생성하기 (복습)

Python/Django

by TUZA 2022. 9. 10. 00:50

본문

#앱(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 매핑시 항상 끝에 슬래시를 붙여주자.

 

#views.py

다시 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/'

 

📖 참고자료

https://wikidocs.net/book/4223

반응형

'Python > Django' 카테고리의 다른 글

[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

관련글 더보기