따라하며 배우는 Django [3]

설문조사 앱을 만들고 뷰 작성하기

Minwoo Kang
Berkbach
Published in
5 min readMay 19, 2019

--

Photo by Element5 Digital on Unsplash

오늘의 내용

저번 시간에 Django 서버를 연 후 admin 페이지에 접속하여 로그인까지 해봤습니다. 오늘은 설문조사라는 앱을 만든 후 뷰(View)를 작성하여 웹페이지에서 “Hello, Django!!”라는 문구를 띄우는 작업을 해보겠습니다.

설문조사 앱 생성

Django는 프로젝트 기능들을 앱 단위로 구분하여 관리하는 것을 지향하고 있습니다. 기능들을 앱 단위로 관리함으로써 얻는 가장 큰 장점은 재사용 가능성입니다. 똑같은 기능을 하는 앱이라면 다른 프로젝트에 그대로 적용시킬 수 있습니다. (저는 유지 보수에도 좋다고 생각이 되는데 그렇지 않다는 사람들도 몇몇 있더군요…) Django는 앱 생성 시 기본 디렉토리 구조를 제공해주기 때문에 우리는 오로지 코드 작성에 집중할 수 있습니다.

그럼 설문조사 기능을 정의할 polls라는 앱을 만들어보도록 하겠습니다.

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 앱을 생성한 뒤 mysite/settings.py 의 INSTALLED_APPS에 등록을 해주세요. (앱 생성 후 INSTALLED_APPS에 등록하지 않으면 나중에 에러가 나게 됩니다.)

웹에서 Hello, Django 출력하기

polls/views.py 를 열어 아래와 같이 파이썬 코드를 입력해주세요.

polls/views.py

HttpResponse함수를 통해 “Hello, Django!!”를 리턴해주는 index 함수를 선언하였습니다. 출력 결과가 어떻게 나오는지는 계속 진행하시면 알 수 있을 겁니다.

우리는 현재 view만 작성했습니다. 아직 웹에 view를 띄울 수 있는 상태가 아닙니다. view를 웹페이지에 띄우기 위해서는 URL 라우팅이라는 과정을 해줘야합니다.

polls 디렉토리 안에 urls.py 를 생성하고 아래와 같이 작성하겠습니다.

polls/urls.py

path 함수를 통해 index함수를 실행시킬 urlpattern을 정의하고 이러한 urlpattern을 index라는 이름으로 부르겠다고 선언해준 것입니다.

마지막으로 루트 URLconf에서 polls.urls 모듈을 바라보도록 설정하겠습니다. mysite/urls.py를 열어 django.urls.include를 import하고 urlpatterns에 include함수를 추가하도록 하겠습니다.

mysite/urls.py

include함수는 다른 URLconf를 참조할 수 있도록 해줍니다. 우리가 작성한 소스를 기준으로 설명을 한다면 ‘polls/’까지 일치하는 부분을 mysite/urls.py부분이 잘라내고 나머지 문자열 부분을 include된 polls의 URLconf로 전달하여 후속처리를 진행하게 됩니다.

python manage.py runserver 를 통해 서버를 열고 127.0.0.1:8000/polls/ 에 접속해주세요. 지금까지 잘 진행하셨다면 웹페이지에는 “Hello, Django”라는 문구가 보일 것입니다.

요약 정리

  1. polls 기능을 정의할 polls 앱을 생성한다.
  2. polls 앱을 INSTALLED_APPS에 등록해준다.
  3. polls/views.py에 우리가 보여줄 view를 작성한다. ex) “Hello, Django!!”
  4. polls/urls.py를 생성하고 URLconf를 생성한다. (1차 라우팅 작업)
  5. 루트 URLconf에서 polls의 URLconf를 include 해준다. (2차 라우팅 작업)

아직 model에 대한 로직이 들어가있지 않지만 대부분의 프로젝트가 다음과 같은 순서로 진행됩니다. 작업의 순서를 꼭 기억해주시기 바랍니다.

대부분 이해가 되셨을거라 생각이 되지만 이해가 잘 안되시는 분들은 댓글을 통해 질문을 해주세요. 또한 제가 언급한 1차 라우팅, 2차 라우팅의 개념이 ‘아직 확실하지 않다’ 하시는 분들은 정의된 urlpattern을 바꿔보시면 완벽하게 이해가 되지 않을까 싶습니다.

다음 강좌에서는 설문 조사에 필요한 model을 생성해보도록 하겠습니다.

혹여나 막히신 분들을 위하여 프로젝트를 github를 통해 공유해드리겠습니다. commit message를 통해 필요한 부분을 clone하여 참고하시면 될 것 같습니다.

Github address

--

--