이제 작업을 하기위한 환경(프로젝트)이 설치 되었다
장고는 앱의 기본 디텍토리 구조를 자동으로 생성할 수 있는 도구를 제공하기 때문에, 코드에더 집중할 수 있다
프로젝트와 앱의 차이점
앱은 웹로그 시스템, 공공 기록 데이터베이스 또는 소규모 여론 조사 앱과 같은 무언가를 하는 웹 애플리케이션이다.
프로젝트는 특정 웹 사이트에 대한 구성 및 앱의 모음이다. 한 프로젝트에는 여러 앱이 포함될 수 있다. 앱은 여러 프로젝트에 있을 수 있다.
앱을 생성하기 위해 manage.py가 존재하는 디렉토리에서 명령을 입력해 보자
$ python manage.py startapp polls
polls라는 디렉토리가 생겼다. 이를 펼쳐보면
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
"polls/view.py" 파일을 열어 파이썬 코드를 작성하자
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
장고의 가장 간단한 형태의 view이다. 이를 호출하려면 이와 연결된 URL 이 있어야 하는데, 이를 위해 URLconf가 사용된다 polls 디렉토리에서 URLconf를 생성하려면, urls.py 라는 파일을 생성해야한다
다음 polls/urls.py 파일에 다음과 같은 파이썬 코드를 작성한다
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
다음은 최상위 URLconf에서 polls.urls 모듈을 바라보게 설정해야한다
mysite/urls.py 파일을 열고, Django.urls.include 를 import 한후
urlpatterns 리스트에 include() 함수를 추가한다
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
include() 는 다른 URL 패턴을 포함할 때마다 항상 include()를 사용해야 합니다. admin.site.urls 가 유일한 예외이다
include() 함수는 다른 URLconf들을 참조할 수 있도록 도와준다. 장고가 함수 include()를 만나게 되면,
URL의 그시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속처리 하기 위해 include된 URLconf로 전달한다include() 덕분에 URL을 쉽게 연결할 수 있다
polls 앱에 그 자체의 URLconf(polls/urls.py)가 존재하는 한
"/polls/", 또는 "/fun_polls/", "/content/polls/"와 같은 경로, 또는 그 어떤 다른 root 경로에 연결하더라도, 앱은 여전히 잘 동작할 것이다
이제 index뷰가 URLconf에 연결되었다 잘 작동하는지 확인해보기위해 명령을 입력해보자
$ python manage.py runserver
브라우저에서 http://localhost:8000/polls/ 를 입력하면 index 뷰에 정의한 "Hello, world. You're at the polls index." 가 보여야 하지만 아직 앱을 세팅하지 않았기 때문에 페이지를 찾을수 없다는 문구가 뜬다
path() 함수에는 2개의 필수 인수인 route와 view, 2개의 선택가능한 인수로 kwargs, name까지 4개의 인수가 전달되었다.
path() 인수: view
장고에서 일치하는 패턴을 찾으면, HttpRequest 객체를 첫번째 인수로하고, 경로로 부터 캡쳐된 값을 키워드 인수하여 특정한 view 함수를 호출한다
path() 인수 : kwargs
임의의 키워드 인수들은 목표한 view에 사전형으로 전달된다 (이 튜토리얼에서는 사용하지않음)
path() 인수 : name
URL에 이름을 지으면, 템플릿을 포함한 장고 어디에서나 몇확하게 참조할 수 있다
이 기능을 이용하여, 단 하나의 파일만 수정해도 프로젝트의 모든 URL을 바꿀수 있도록 도와준다