본문 바로가기
파이썬/장고(django)

[Django] 튜토리얼1. 요청과 응답(Requests and responses)

by 책 읽는 개발자_테드 2022. 5. 29.
반응형

 

이 글은 장고 공식 홈페이지의 튜토리얼을 번역하고, 직접 실습하는 과정을 정리합니다.

 

목차

· 프로젝트 생성하기

· 개발 서버 시작하기

· 설문조사 앱 생성하기

· 첫 번째 view 작성하기


해당 튜토리얼에서는 기본 설문 조사 응용 프로그램을 만드는 과정을 통해 학습을 진행한다. 해당 튜토리얼은 Python 3.8 이상을 지원하는 Django 4.0을 사용하여 작성되었다. 아래 명령어를 통해 Django 버전을 확인할 수 있다.

$ python -m django --version

 

프로젝트 생성하기

Django를 처음 사용하는 경우 초기 설정을 처리해야 한다. 즉, 데이터베이스 구성 ,Django 관련 옵션 및 응용 프로그램별 설정을 포함하여 Django 인스턴스에 대한 설정 모음인 Django 프로젝트를 설정하는 일부 코드를 자동 생성해야 한다.

 

커맨드 라인에서 코드를 저장하려는 디렉터리로 이동한 후 다음 명령을 실행한다.

$ django-admin startproject mysite

 

위 명령은 헌재 디렉토리에 mysite 디렉터리를 생성한다. 이 명령이 작동하지 않으면 다음을 참고한다. https://docs.djangoproject.com/en/4.0/faq/troubleshooting/#troubleshooting-django-admin

 

※ 주의!

· 내장된 Python 또는 Django 구성요소와 같은 프로젝트 이름을 지정하는 것은 피해야 한다. ex) django, test

· 생성된 코드를 저장할 위치: 장고 프로젝트는 /var/www와 같이 일반적인 웹서버의 문서 루트에 저장하지 않는다. 이렇게되면, 웹서버를 통해 코드를 볼 수 있게 되기 때문이다. 따라서  /home/mycode와 같은 문서 루트 일부 디렉토리에 코드를 저장한다.

 

mysite 디렉터리에는 다음과 같은 파일들이 생성된다.

 

· mysite/ 외부 루트 디렉터리 : 프로젝트의 컨테이너다. 이름은 장고에 영향을 주지 않으므로, 언제든지 원하는 이름으로 변경할 수 있다.

· manage.py: 장고 프로젝트와 다양한 방식으로 상호 작용할 수 있게 해주는 커맨드 라인 유틸리티다.

- 세부정보: https://docs.djangoproject.com/en/4.0/ref/django-admin/

· mysite/ 내부 디렉터리: 프로젝트를 위한 실제 파이썬 패키지다. 해당 이름을 사용해 내부의 모든것을 import할 수 있는 파이썬 패키지 이름이다. ex) mysite.urls

· mysite/__init__.py: 이 디렉터리가 Python 패키지로 간주되어야 함을 Python에 알리는 빈 파일이다. 

· mysite/settings.py: 장고 프로젝트의 설정/구성이다.  

- 세부정보: https://docs.djangoproject.com/en/4.0/topics/settings/

· mysite/urls.py: 장고 프로젝트에 대한 URL 선언이다. 장고 기반 사이트의 목차(table of contents)이다.

- 세부정보: https://docs.djangoproject.com/en/4.0/topics/http/urls/

· mysite/asgi.py: ASGI 호환 웹서버가 프로젝트를 제공하기 위한 진입점이다.

- 세부정보: https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/

· mysite/wsgi.py: WSGI 호환 웹서버가 프로젝트를 제공하기 위한 진입점이다.

- 세부정보: https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/

 

개발 서버 시작하기

장고 프로젝트를 작동시켜보자. mysite 디렉터리 내부로 이동한 후 다음 명령어를 입력한다.

$ python manage.py runserver

 

미적용된 데이터베이스 마이그레이션 경고는 일단 무시하자. http://127.0.0.1:8000/에 접속하면, 다음과 같은 화면을 볼 수 있다.

※ 주의!

· 개발 서버는 필요에 따라 각 요청에 대해 파이썬 코드를 자동으로 다시 로드한다. 즉, 코드 변경 사항을 적용하기 위해 서버를 다시 시작할 필요가 없다. 그러나 파일 추가와 같은 일부 작업은 다시 시작을 트리거하지 않으므로 이러한 경우 서버를 다시 시작해야 한다.

 

설문조사 앱 생성하기

장고에서 작성하는 각 애플리케이션은 특정 규칙을 따르는 파이썬 패키지로 구성된다. 장고는 앱의 기본 디렉터리 구조를 자동으로 생성하는 유틸리티와 함께 제공되므로 디렉터리를 만드는 것 보다 코드 작성에 집중할 수 있다.

 

Projects vs Apps

앱은 블로그 시스템, 공공 기록 데이터베이스, 소규모 투표 앱과 같은 작업을 수행하는 웹 애플리케이션 프로그램이다.
프로젝트는 특정 웹사이트에 대한 구성 및 앱의 모음이다. 프로젝트에는 여러 앱이 포함될 수 있고, 앱은 여러 프로젝트에 있을 수 있다.

 

앱은 파이썬 경로의 모든 위치에 있을 수 있다. 여기서는 mysite의 하위 모듈이 아닌 자체 최상위 모듈로 가져올 수 있도록 manage.py 파일과 동일한 디렉터리에 설문조사 앱을 생성한다.

 

앱을 만들려면 mange.py와 같은 디렉터리에 있는지 확인하고 다음 명령을 입력한다.

$ python manage.py startapp polls

 

다음과 같은 구조로 파일들이 배치된 polls 디렉터리가 생성된다. 

 

첫 번째 view 작성하기

polls/views.py 파일을 열어 다음과 같이 작성한다.

from django.http import HttpResponse


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

 

뷰를 호출하려면, URL에 매핑해야하고 이를 위해 URLconf가 필요하다. polls 디렉터리에 URLconf를 생성하려면 urls.py라는 파일을 만들면 된다. 이제 앱 디렉터리는 다음과 같아진다.

 

polls/urls.py 파일에 다음 코드를 입력한다.

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

 

다음 단계는 polls.urls 모듈에서 루트 URLconf를 가리키는 것이다. 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() 함수를 사용하면 다른 URLconf를 참조할 수 있다. 

- 장고는 include()를 만날 때마다 해당 지점까지 일치하는 URL 부분을 잘라내고 추가 처리를 위해 포함된 URLconf에 나머지 문자열을 보낸다.

- include() 함수를 통해 URL을 쉽게 pulg&play 할 수 있다. 예를 들어 설문조사는 URLconf(polls/urls.py)에 존재하므로 /polls/, /fun_polls/, /content/polls/ 또는 어떠한 경로 루트에도 배치할 수 있고, 그렇게해도 앱은 계속 동작한다. 

 

※ 주의!

· 다른 URL 패턴을 포함할 때는 항상 include()를 사용해야 한다. admin.site.urls는 이에 대한 유일한 예외다.

 

index view를 URLconf에 연결했으므로, 다음 명령을 통해 작동하는지 확인한다. 

$ python manage.py runserver

 

브라우저에서 http://127.0.0.1:8000/polls/ 링크로 접속하면, 다음과 같은 화면을 볼 수 있다.

urlpatterns 목록에 path() 함수에는 4개의 인수가 전달된다. 2개의 필수 인수인 route와 view, 2개의 선택 인수인 kwargs 및 name이 있다. 

 

route  · route는 URL 패턴을 포함하는 문자열이다. 
· 요청을 처리할 때 장고는 urlpatterns의 첫 번째 패턴에서 시작하여 목록 아래로 내려가면서 일치하는 패턴을 찾을 때까지 요청된 URL을 각 패턴과 비교한다.
· 패턴은 GET 및 POST 매개변수 또는 도메인 이름을 검색하지 않는다.
ex) https://www.example.com/myapp/ 에 대한 요청에서 URLconf는 myapps/를 찾는다.
https://www.example.com/myapp/?page=3 에 대한 요청에서 URLconf 또한 myapps/를 찾는다.
view · 장고가 일치하는 패턴을 찾으면 첫 번째 인수로 HttpRequest 객체와 키워드 인수로 경로에서 캡처된 값을 사용하여 지정된 view 함수를 호출한다. 
kwargs · 임의의 키워드 인수는 dictionary에서 대상 view로 전달할 수 있다.
name · URL 이름을 지정하면 장고의 다른 곳, 특히 템플릿 내에서 명확하게 참조할 수 있다.
- 이 기능을 통해 단일 파일만 수정하면서 프로젝트의 URL 패턴을 전체적으로 변경할 수 있다.

 

 

https://docs.djangoproject.com/en/4.0/intro/tutorial01/

반응형

댓글