Django tutorial project - 1

minch·2021년 7월 14일
0

Django

목록 보기
2/16
post-thumbnail

Django tutorial

Django에서 프로젝트를 tutorial해주는 사이트를 보고 한번 따라해보았다.

Make a project

프로젝트를 생성할 디렉토리를 먼저 만들어 놓고 그 위치에서

$ django-admin startproject mysite

명령어를 통해 mysite라는 디렉토리를 만들어 프로젝트를 생성해준다.

그렇게 하면,

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

위의 파일들이 생성이 된다.

  • manage.py - Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티와 해당 프로젝트의 setting.py 값을 알려주는 역할을 한다. 프로젝트 시작할때 자동으로 생성이 된다.
    manage.py 설명 링크

  • mysite - 프로젝트를 위한 실제 Python 패키지들이 저장되는 곳,
    이 디렉토리 내의 이름을 이용하여 프로젝트의 어디서나 Python 패키지들을 import 할 수 있다. (mysite.urls 와 같은 식으로)

  • mysite/settings.py - 현재 Django 프로젝트의 환경 및 구성을 저장한다.

  • mysite/urls.py - 현재 Django project 의 URL 선언을 저장한다. Django 로 작성된 사이트의 《목차》 라고 할 수 있다.

  • mysite/asgi.py & wsgi.py - 프로젝트를 제공하기 위한 ASGI & WSGI를 호환하는 웹 서버의 진입점.

How to Runserver

생성한 프로젝트를 실행하는 방법은
manage.py가 있는 'mysite'(디렉토리)에서

$ python manage.py runserver

위 명령어를 입력하면 정상적으로 서버가 실행된다.

이를 확인하는 방법은 웹 브라우져에 http://127.0.0.1:8000/ 을 입력해 접속해 볼 수 있다.

기본적으로 내부 IP의 8000번 포트를 이용하는데,

아래와 같은 형식으로 포트를 변경할 수 있다.

$ python manage.py runserver 8080
$ python manage.py runserver 0:8000

Create an Application

만들어진 프로젝트에 앱(application)을 추가해보자.

방법은 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)를 할 수 있는 앱이다.

그렇다면, 프로젝트와 앱의 차이점은 무엇일까?

Project vs App ?

이 차이점을 django 문서에서는 이렇게 설명하고 있다.

(Application)은 웹로그 시스템, 공공 기록 데이터베이스 또는 소규모 설문조사 앱과 같은 작업을 수행하는 웹 애플리케이션입니다.
프로젝트(Project)는 특정 웹사이트에 대한 구성 및 앱들의 모음입니다.
프로젝트에는 여러 앱이 포함될 수 있고 또 앱은 여러 프로젝트에 있을 수 있습니다.
링크

즉, 프로젝트가 더 큰 개념으로 존재하고 그 안에 각각의 역할을 가진 앱들이 있는 것이다.

위에서 생성한 polls app의 views.py에 아래 코드를 입력하고,

polls/views.py

from django.http import HttpResponse


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

이를 실행하기 위해 polls의 디렉토리 안에 다음 내용을 가진 urls.py를 생성한다.

polls/urls.py

from django.urls import path

from . import views

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

그리고 최상위 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),
]

path(), include()

위에서 나온 path(), include()는 무엇일까?

path()는 경로를 지정하는 함수로,
path(route, view, kwargs=None, name=None) 와 같이 4개의 파라미터를 받아들일 수 있는데, 처음 2개의 파라미터는 반드시 있어야 하고, 뒤의 2개는 옵션이다.

첫번째 파라미터에는 URL route에서 사용된 경로를 지정하는 것이고,

두번째 파라미터는 해당 URL에 상응하는 View를 지정하는 것이다.
View를 지정하는 방식으로는 함수 뷰(function view)의 이름을 지정하거나 클래스에 기반한 View (class based view)의 경우 "클래스명.as_view()"와 같이 지정한다.

세번째 파라미터에는 Dictionary 형식의 아큐먼트를 옵션으로 지정할 수 있으며,

마지막으로 네번째 파라미터에는 path 이름을 지정하는 것으로 이는 path명으로부터 URL 패턴 정보를 찾는 URL Reversing 을 위해 흔히 사용된다)
출처 : 예제로 배우는 파이썬 프로그래밍

include()?
path('polls/', include('polls.urls'))는 polls/로 시작되는 페이지 요청은 모두 polls/urls.py 파일에 있는 URL 매핑을 참고하여 처리하라는 의미이다.
출처 : 점프 투 장고

위의 방식으로 mysite.urls.py가 polls/urls.py를 바라보게 하는 것이다.

0개의 댓글