첫 번째 장고 앱 작성하기, part 1¶예제로 배워봅시다. Show 이 튜토리얼을 통해, 간단한 설문조사(Polls) 어플리케이션을 만드는 과정을 따라해 보겠습니다. 두 파트로 구성되어 있습니다.
Django 설치가 되어 있다고 가정합니다. 쉘 프롬프트 ($ 접두사로 표시)에서 다음 명령을 실행하여 Django가 설치되어 있고 어떤 버전인지 알 수 있습니다. / $ python -m django --version
...\> py -m django --version
Django가 설치 되었다면, 설치된 Django의 버전을 확인할 수 있습니다. 만약 설치가 제대로 되지 않았다면, “No module named django”와 같은 에러가 발생합니다. 이 튜토리얼은 Django 4.1 을 위해 작성된 것으로, Python 3.8 혹은 이후의 버전을 지원합니다. 사용하시는 Django 의 버전이 다른 경우에는, 현재 페이지 오른쪽 아래에 있는 버전 변경 기능을 이용하여 현재 사용하는 Django 버전에 맞는 튜토리얼을 참조하거나 Django 를 최신 버전으로 업데이트할 수 있습니다. 이전 버전의 Python을 사용중인 경우는 faq-python-version-support 에서 호환되는 Django 버전을 확인하십시오. 예전 버전의 Django를 제거하고 새로운 버전의 Django를 설치하는 방법은 Django 설치하기를 참조하세요. 도움을 받을 수 있는 방법 이 튜토리얼을 수행하는 데 문제가 있는 경우 FAQ 섹션인 :doc:`Getting Help </faq/help>`으로 이동하십시오. 프로젝트 만들기¶Django를 처음 사용한다면, 초기 설정에 주의를 기울여야 합니다. Django project를 구성하는 코드를 자동 생성해야 하는데, 이 과정에서 데이터베이스 설정, Django 위한 옵션들, 어플리케이션을 위한 설정들과 같은 Django 인스턴스를 구성하는 수많은 설정들이 생성되기 때문입니다. 커맨드라인에서 / $ django-admin startproject mysite
...\> django-admin startproject mysite
이 명령은 현재 디렉토리에서 참고 프로젝트를 생성할 때, Python 또는 Django에서 사용 중인 이름은 피해야 합니다. 특히, 코드가 어디에서 서비스 되어야 할까요? 과거의 PHP 를 작성해본
경험이 있다면(최근의 프레임워크가 아닌) 아마 코드 전체를 ( 작성한 코드를
mysite/ manage.py mysite/ __init__.py settings.py urls.py asgi.py wsgi.py 이 파일들은,
개발 서버¶당신의 Django 프로젝트가 제대로 동작하는지 확인해 봅시다. / $ python manage.py runserver
...\> py manage.py runserver
커맨드라인에서 다음과 같은 출력을 볼 수 있습니다. Performing system checks... System check identified no issues (0 silenced). You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them. 1월 04, 2023 - 15:50:53 Django version 4.1, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. 참고 현재 데이터베이스에 적용되지 않은 변경사항들(migrations)에 대한 경고들은 무시해도 됩니다. 데이터베이스에 대한 부분은 간단히 다루도록 하겠습니다. Django 개발 서버를 시작했습니다. 개발 서버는 순수 Python으로 작성된 경량 웹 서버입니다. 운영 준비가 될 때까지 Apache와 같은 운영 서버를 구성할 필요 없이 신속하게 개발할 수 있도록 Django에 포함했습니다. 이쯤에서 하나 기억할 것이 있습니다. 이 서버를 운영 환경과 유사한 환경에서 사용하지 마십시오. 개발 중에만 사용할 수 있도록 되어 있습니다. (우리는 웹 서버가 아닌 웹 프레임워크를 만드는 사업을 하고 있습니다.) 이제 서버가 실행 중이니 웹 브라우저의 http://127.0.0.1:8000/ 를 통해 접속할 수 있습니다. 여러분은 로켓이 이륙하는 “Congratulations!” 페이지가 보일 것입니다. 잘 동작하네요! 포트 변경하기 기본적으로, 만약 이 서버의 포트를 변경하고 싶다면, 커맨드라인에서 인수를 전달해주면 됩니다. 예를들어, 이 명령은 포트를 8080 으로 서버를 시작할 것입니다. / $ python manage.py runserver 8080 ...\> py manage.py runserver 8080
서버의 IP를 변경하려면 포트와 함께 전달하십시오. 예를 들어, 사용 가능한 모든 공용 IP를 청취하려면 (이는 Vagrant를 실행 중이거나 네트워크의 다른 컴퓨터에서 작업하고 싶을 때 유용합니다) 다음을 사용하십시오. / $ python manage.py runserver 0.0.0.0:8000 ...\> py manage.py runserver 0.0.0.0:8000
Full docs for the development server can be found in the
개발 서버는 요청이 들어올 때마다 자동으로 Python 코드를 다시 불러옵니다. 코드의 변경사항을 반영하기 위해서 굳이 서버를 재기동 하지 않아도 됩니다. 그러나, 파일을 추가하는 등의 몇몇의 동작은 개발서버가 자동으로 인식하지 못하기 때문에, 이런 상황에서는 서버를 재기동 해야 적용됩니다. 설문조사 앱 만들기¶이제, 작업을 시작하기 위해 당신의 환경(프로젝트)이 설치되었습니다. Django에서 당신이 작성하는 각 어플리케이션들은 다음과 같은 관례로 Python 패키지가 구성됩니다. Django 는 앱(app) 의 기본 디렉토리 구조를 자동으로 생성할 수 있는 도구를 제공하기 때문에, 코드에만 더욱 집중할 수 있습니다. 프로젝트 대 앱 프로젝트와 앱은 무엇이 다를까요? 앱은 블로그 시스템, 공개 기록 데이터베이스 또는 소규모 의견조사 앱과 같은 작업을 수행하는 웹 애플리케이션입니다. 프로젝트는 특정 웹 사이트에 대한 구성 및 앱의 모음입니다. 한 프로젝트에 여러 개의 앱이 포함될 수 있습니다. 앱은 여러 프로젝트에 있을 수 있습니다. 당신의 앱은 Python path <tut-searchpath>`의 모든 위치에서 사용할 수 있습니다. 이 튜토리얼에서는 :file:`manage.py 와 동일한 디렉터리에 의견조사 앱을 만들어서 파일을 앱을 생성하기 위해 / $ python manage.py startapp polls
...\> py manage.py startapp 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.") Django에서 가장 간단한 형태의 뷰입니다. 뷰를 호출하려면 이와 연결된 URL 이 있어야 하는데, 이를 위해 URLconf가 사용됩니다. polls 디렉토리에서 URLconf를 생성하려면, polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py urls.py views.py “polls/urls.py” 파일에는 다음과 같은 코드가 포함되어 있습니다.
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ] 다음 단계는, 최상위 URLconf 에서
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('polls/', include('polls.urls')), path('admin/', admin.site.urls), ]
언제
다른 URL 패턴을 포함할 때마다 항상 이제 / $ python manage.py runserver
...\> py manage.py runserver
브라우저에서 http://localhost:8000/polls/를 입력하면 페이지가 보이지 않나요? 에러 페이지가 표시된다면, http://localhost:8000/ 이 아니라 http://localhost:8000/polls/가 정확히 주소 창에 입력되었는지 확인하세요.
path() 인수: route¶
패턴들은 GET 이나 POST 의 매개 변수들, 혹은 도메인 이름을 검색하지 않습니다. 예를 들어, path() 인수: view¶Django 에서 일치하는 패턴을 찾으면, path() 인수: kwargs¶임의의 키워드 인수들은 목표한 view 에 사전형으로 전달됩니다. 그러나 이 튜토리얼에서는 사용하지 않을겁니다. path() 인수: name¶URL 에 이름을 지으면, 템플릿을 포함한 Django 어디에서나 명확하게 참조할 수 있습니다. 이 강력한 기능을 이용하여, 단 하나의 파일만 수정해도 project 내의 모든 URL 패턴을 바꿀 수 있도록 도와줍니다. request 와 response 의 기본 흐름을 이해하셨다면, 튜토리얼 2장 에서 데이터베이스 작업을 시작해보세요. |