[DJANGO]튜토리얼① - APP, VIEW 생성

박민하·2022년 6월 1일
0

PROJECT

목록 보기
1/17
post-thumbnail

이 포스팅은 Django 사이트의 튜토리얼을 정리한 글이다.


✅ 프로젝트 만들기

  Django를 처음 사용한다면 초기 설정에 주의를 기울여야 한다. 먼저 커맨드라인에서 cd 명령으로 코드를 저장할 디렉토리로 이동 한 후에 다음 명령어를 입력해보자. 현재 디렉토리에서 mysite라는 디렉토리를 생성하는 명령어다.

$ django-admin startproject mysite

  startproject 안에는 아래와 같은 파일들이 생성된다.

  • manage.py : Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티다.
  • mysite/ 디렉토리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장된다. 이 디렉토리 내의 이름을 이용하여, (mysite.urls 와 같은 식으로) 프로젝트의 어디서나 Python 패키지들을 임포트할 수 있다.
  • mysite/__init__.py : Python에게 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 빈 파일이다.
  • mysite/settings.py : 현재 Django 프로젝트의 환경 및 구성을 저장한다. Django settings에서 환경 설정이 어떻게 동작하는지 확인할 수 있다.
  • mysite/urls.py : 현재 Django project 의 URL 선언을 저장한다. Django 로 작성된 사이트의 목차라고 할 수 있다.
  • mysite/asgi.py : 프로젝트에 사용할 ASGI 호환 웹 서버의 진입점이다.
  • mysite/wsgi.py : 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점이다.

✅ 개발 서버 : Django 프로젝트가 제대로 동작하는지 확인

$ python manage.py runserver

  정상적으로 서버가 동작한다면 웹 브라우저에서 http://127.0.0.1:8000/ 을 통해 접속할 수 있다. 로켓이 이륙하는 모습이 담긴 《Congratulations!》 페이지를 보면 성공이다.

  작업을 시작하기 위한 환경(프로젝트)이 설치됐다!

"포트 변경 방법?"
기본적으로 runserver 명령은 내부 IP 의 8000 번 포트로 개발 서버를 띄우지만, 커맨드라인에서 인수를 전달해주면 포트 번호를 변경할 수 있다.

#포트를 8080 으로 서버를 시작하라
$ python manage.py runserver 8080

서버의 IP를 변경하려면 포트와 함께 전달하면 된다.

#사용 가능한 모든 공용 IP를 청취
$ python manage.py runserver 0:8000

✅ 설문조사 앱 만들기 : 앱(app)의 기본 디렉토리 구조 생성

$ python manage.py startapp polls

  polls라는 디렉토리가 생겼다. 이 디렉토리 구조는 투표 어플리케이션의 집이 되어줄 것이다.

✅ 뷰(view) 작성하기

1. 《polls/views.py》를 열어 다음과 같은 파이썬 코드를 입력

#polls/views.py
from django.http import HttpResponse


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

  Django에서 가장 간단한 형태의 뷰다. 뷰를 호출하려면 이와 연결된 URL 이 있어야 하는데, 이를 위해 URLconf가 사용된다.

2. polls 디렉토리에 파일 생성

  polls 디렉토리에서 URLconf를 생성하려면, urls.py라는 파일을 생성해야 한다. 아래 코드를 입력하자.

# polls/urls.py
from django.urls import path

from . import views

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

3. 《mysite/urls.py》를 열어 코드 입력

  최상위 URLconf 에서 polls.urls 모듈을 바라보게 설정한다.

  기본적으로 코드가 이미 작성되어 있을텐데

  • django.urls.include를 import
  • urlpatterns 리스트에 include() 함수 입력

  두 가지만 더 추가하자.

# mysite/urls.py
from django.contrib import admin
from django.urls import include, path

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

  include() 함수는 다른 URLconf들을 참조할 수 있도록 한다. Django가 함수 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.》 가 보일 것이다.

"언제 include()를 사용해야 할까?"
다른 URL 패턴을 포함할 때마다 항상 사용해야 한다. admin.site.urls가 유일한 예외다.

  path() 함수에는 2개의 필수 인수인 route 와 view, 2개의 선택 가능한 인수로 kwargs 와 name 까지 모두 4개의 인수가 전달됐다.

  • route

  route 는 URL 패턴을 가진 문자열 이다. 요청이 처리될 때, Django 는 urlpatterns 의 첫 번째 패턴부터 시작하여, 일치하는 패턴을 찾을 때 까지 요청된 URL 을 각 패턴과 리스트의 순서대로 비교한다.

  패턴들은 GET 이나 POST 의 매개 변수들, 혹은 도메인 이름을 검색하지 않는다. 예를 들어, https://www.example.com/myapp/ 이 요청된 경우, URLconf 는 오직 myapp/ 부분만 바라본다. https://www.example.com/myapp/?page=3 같은 요청에도, URLconf 는 역시 myapp/ 부분만 신경쓴다.

  • view

  Django 에서 일치하는 패턴을 찾으면 HttpRequest 객체를 첫번째 인수로 하고, 경로로 부터 캡처된 값을 키워드 인수로하여 특정한 view 함수를 호출한다.

  • kwargs

  임의의 키워드 인수들은 목표한 view 에 사전형으로 전달된다.

  • name

  URL 에 이름을 지으면 템플릿을 포함한 Django 어디에서나 명확하게 참조할 수 있다. 이 기능을 이용하여 단 하나의 파일만 수정해도 project 내의 모든 URL 패턴을 바꿀 수 있도록 도와준다.

profile
backend developer 🐌

0개의 댓글