기본 설문 조사 애플리케이션 생성

Advanced

소개

이 튜토리얼에서는 기본적인 투표 애플리케이션을 만드는 과정을 안내해 드리겠습니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 고급 레벨의 실험이며 완료율은 29%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

개요

예제를 통해 배워봅시다.

이 튜토리얼에서는 기본적인 투표 애플리케이션을 만드는 과정을 안내해 드리겠습니다.

이 애플리케이션은 두 부분으로 구성됩니다.

  • 사람들이 투표를 보고 투표할 수 있는 공개 사이트.
  • 투표를 추가, 변경 및 삭제할 수 있는 관리자 사이트.

Django 가 이미 설치되어 있다고 가정합니다. 셸 프롬프트에서 다음 명령을 실행하여 Django 가 설치되었는지 여부와 버전을 확인할 수 있습니다.

python -m django --version

Django 가 설치되어 있으면 설치된 버전을 볼 수 있습니다. 설치되어 있지 않으면 "No module named django"라는 오류가 표시됩니다.

이 튜토리얼은 Python 3.10 이상을 지원하는 Django 를 위해 작성되었습니다. Django 버전이 일치하지 않으면, 이 페이지 오른쪽 하단의 버전 전환기를 사용하여 해당 Django 버전의 튜토리얼을 참조하거나 Django 를 최신 버전으로 업데이트할 수 있습니다.

프로젝트 생성

Django 를 처음 사용하는 경우, 몇 가지 초기 설정을 처리해야 합니다. 즉, Django project (Django 인스턴스에 대한 설정 모음, 데이터베이스 구성, Django 관련 옵션 및 애플리케이션별 설정을 포함) 을 설정하는 일부 코드를 자동 생성해야 합니다.

명령줄에서 코드를 저장할 디렉토리로 cd한 다음 다음 명령을 실행합니다.

cd ~/project
django-admin startproject mysite

이렇게 하면 현재 디렉토리에 mysite 디렉토리가 생성됩니다.

startproject가 생성한 내용을 살펴보겠습니다.

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

이 파일들은 다음과 같습니다.

  • 외부 mysite/ 루트 디렉토리는 프로젝트의 컨테이너입니다. 이름은 Django 에 중요하지 않으며 원하는 대로 이름을 변경할 수 있습니다.
  • manage.py: 이 Django 프로젝트와 다양한 방식으로 상호 작용할 수 있는 명령줄 유틸리티입니다.
  • 내부 mysite/ 디렉토리는 프로젝트의 실제 Python 패키지입니다. 이 이름은 내부의 모든 것을 가져오는 데 사용해야 하는 Python 패키지 이름입니다 (예: mysite.urls).
  • mysite/__init__.py: 이 디렉토리를 Python 패키지로 간주해야 함을 Python 에 알리는 빈 파일입니다.
  • mysite/settings.py: 이 Django 프로젝트의 설정/구성입니다.
  • mysite/urls.py: 이 Django 프로젝트의 URL 선언; Django 기반 사이트의 "목차"입니다.
  • mysite/asgi.py: ASGI 호환 웹 서버가 프로젝트를 제공하기 위한 진입점입니다.
  • mysite/wsgi.py: WSGI 호환 웹 서버가 프로젝트를 제공하기 위한 진입점입니다.

개발 서버

Django 프로젝트가 작동하는지 확인해 보겠습니다. 아직 하지 않았다면 외부 mysite 디렉토리로 이동하여 다음 명령을 실행합니다.

cd ~/project/mysite
python 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.

- 15:50:53 Django version , using settings 'mysite.settings' Starting development server at <http://127.0.0.1:8000/> Quit the server with CONTROL-C.

지금은 적용되지 않은 데이터베이스 마이그레이션에 대한 경고를 무시하십시오. 곧 데이터베이스를 처리할 것입니다.

Django 개발 서버, 즉 순수하게 Python 으로 작성된 경량 웹 서버를 시작했습니다. 프로덕션 환경에 준비될 때까지 Apache 와 같은 프로덕션 서버를 구성할 필요 없이 빠르게 개발할 수 있도록 Django 에 포함시켰습니다.

이제 다음 사항을 기억하는 것이 좋습니다. 프로덕션 환경과 유사한 환경에서는 이 서버를 사용하지 마십시오. 개발 중에만 사용하도록 설계되었습니다. (저희는 웹 프레임워크를 만드는 일을 하고 있으며, 웹 서버를 만드는 일은 아닙니다.)

이제 서버가 실행 중이므로 웹 브라우저로 http://127.0.0.1:8000/을 방문하십시오. 또는 터미널에서 curl 127.0.0.1:8000을 실행하십시오. 로켓이 이륙하는 "축하합니다!" 페이지가 표시됩니다. 작동했습니다!

LabEx VM 에서는 ALLOWED_HOSTS에 LabEx 도메인을 추가해야 합니다. mysite/settings.py를 편집하고 ALLOWED_HOSTS의 끝에 *를 추가하여 다음과 같이 보이도록 합니다.

ALLOWED_HOSTS = ["*"]

이렇게 하면 Django 가 모든 호스트 헤더로 요청을 제공할 수 있음을 알립니다.

Django development server running

포트 변경

기본적으로 runserver 명령은 포트 8000 의 내부 IP 에서 개발 서버를 시작합니다.

서버의 포트를 변경하려면 명령줄 인수로 전달하십시오. 예를 들어, 이 명령은 포트 8080 에서 서버를 시작합니다.

python manage.py runserver 8080

서버의 IP 를 변경하려면 포트와 함께 전달하십시오. 예를 들어, 사용 가능한 모든 공용 IP 를 수신 대기하려면 (Vagrant 를 실행하거나 네트워크의 다른 컴퓨터에서 작업을 표시하려는 경우 유용함) 다음을 사용하십시오.

python manage.py runserver 0.0.0.0:8080

이제 LabEx VM 에서 Web 8080 탭으로 전환하면 동일한 "축하합니다" 페이지가 표시됩니다.

Django development server page

개발 서버에 대한 전체 문서는 runserver 참조에서 찾을 수 있습니다.

runserver의 자동 재로딩 개발 서버는 필요에 따라 각 요청에 대해 Python 코드를 자동으로 다시 로드합니다. 코드 변경 사항이 적용되도록 서버를 다시 시작할 필요가 없습니다. 그러나 파일을 추가하는 것과 같은 일부 작업은 다시 시작을 트리거하지 않으므로 이러한 경우 서버를 다시 시작해야 합니다.

Polls 앱 생성

이제 환경 ( "프로젝트") 이 설정되었으므로 작업을 시작할 준비가 되었습니다.

Django 에서 작성하는 각 애플리케이션은 특정 규칙을 따르는 Python 패키지로 구성됩니다. Django 에는 앱의 기본 디렉토리 구조를 자동으로 생성하는 유틸리티가 함께 제공되므로 디렉토리를 만드는 대신 코드 작성에 집중할 수 있습니다.

프로젝트 vs. 앱 프로젝트와 앱의 차이점은 무엇일까요? 앱은 블로그 시스템, 공공 기록 데이터베이스 또는 작은 설문 조사 앱과 같이 무언가를 수행하는 웹 애플리케이션입니다. 프로젝트는 특정 웹사이트에 대한 구성 및 앱의 모음입니다. 프로젝트는 여러 앱을 포함할 수 있습니다. 앱은 여러 프로젝트에 있을 수 있습니다.

앱은 Python path <tut-searchpath>의 아무 곳에나 있을 수 있습니다. 이 튜토리얼에서는 mysite의 하위 모듈이 아닌 자체 최상위 모듈로 가져올 수 있도록 manage.py 파일과 동일한 디렉토리에 설문 조사 앱을 생성합니다.

앱을 생성하려면 manage.py와 동일한 디렉토리에 있는지 확인하고 다음 명령을 입력하십시오.

cd ~/project/mysite
python manage.py startapp polls

그러면 다음과 같이 배치된 polls 디렉토리가 생성됩니다.

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

이 디렉토리 구조는 설문 조사 애플리케이션을 보관합니다.

첫 번째 뷰 작성

첫 번째 뷰를 작성해 보겠습니다. polls/views.py 파일을 열고 다음 Python 코드를 입력합니다.

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

이것은 Django 에서 가능한 가장 간단한 뷰입니다. 뷰를 호출하려면 URL 에 매핑해야 하며, 이를 위해 URLconf 가 필요합니다.

polls 디렉토리에 URLconf 를 생성하려면 urls.py라는 파일을 만듭니다. 이제 앱 디렉토리는 다음과 같이 표시됩니다.

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 가 polls.urls 모듈을 가리키도록 하는 것입니다. mysite/urls.py에서 django.urls.include에 대한 import 를 추가하고 urlpatterns 목록에 ~django.urls.include를 삽입하여 다음과 같이 만듭니다.

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("polls/", include("polls.urls")),
    path("admin/", admin.site.urls),
]

~django.urls.include 함수는 다른 URLconf 를 참조할 수 있도록 합니다. Django 가 ~django.urls.include를 발견할 때마다 해당 지점까지 일치하는 URL 의 모든 부분을 잘라내고 나머지 문자열을 포함된 URLconf 로 보내 추가 처리를 수행합니다.

~django.urls.include의 아이디어는 URL 을 쉽게 플러그 앤 플레이할 수 있도록 하는 것입니다. 설문 조사가 자체 URLconf (polls/urls.py) 에 있으므로 "/polls/" 또는 "/fun_polls/" 또는 "/content/polls/" 또는 다른 경로 루트 아래에 배치할 수 있으며 앱은 계속 작동합니다.

~django.urls.include()를 언제 사용해야 할까요? 다른 URL 패턴을 포함할 때는 항상 include()를 사용해야 합니다. admin.site.urls는 이에 대한 유일한 예외입니다.

이제 index 뷰를 URLconf 에 연결했습니다. 다음 명령으로 작동하는지 확인합니다.

python manage.py runserver 0.0.0.0:8080

브라우저에서 <http:///polls/>로 이동하면 index 뷰에서 정의한 텍스트 "Hello, world. You're at the polls index."가 표시됩니다.

Django URLconf structure

~django.urls.path 함수는 route, view, kwargs, name 의 네 가지 인수를 전달받습니다. 이 시점에서 이러한 인수가 무엇을 위한 것인지 검토할 가치가 있습니다.

~django.urls.path 인수: route

route는 URL 패턴을 포함하는 문자열입니다. 요청을 처리할 때 Django 는 urlpatterns의 첫 번째 패턴에서 시작하여 목록을 내려가면서 요청된 URL 을 각 패턴과 비교하여 일치하는 항목을 찾을 때까지 비교합니다.

패턴은 GET 및 POST 매개변수 또는 도메인 이름을 검색하지 않습니다. 예를 들어 https://www.example.com/myapp/에 대한 요청에서 URLconf 는 myapp/을 찾습니다. https://www.example.com/myapp/?page=3에 대한 요청에서 URLconf 는 myapp/도 찾습니다.

~django.urls.path 인수: view

Django 가 일치하는 패턴을 찾으면 첫 번째 인수로 ~django.http.HttpRequest 객체를, route 에서 "캡처된" 값을 키워드 인수로 사용하여 지정된 뷰 함수를 호출합니다. 잠시 후에 이에 대한 예를 제공하겠습니다.

~django.urls.path 인수: kwargs

임의의 키워드 인수는 대상 뷰에 딕셔너리로 전달할 수 있습니다. 이 튜토리얼에서는 Django 의 이 기능을 사용하지 않겠습니다.

~django.urls.path 인수: name

URL 의 이름을 지정하면 Django 의 다른 곳, 특히 템플릿 내에서 모호하지 않게 참조할 수 있습니다. 이 강력한 기능을 사용하면 단일 파일만 수정하면서 프로젝트의 URL 패턴을 전역적으로 변경할 수 있습니다.

요약

축하합니다! 기본 설문 조사 애플리케이션 생성 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.