django
버전 확인
python -m django --version
# 나는 3.0.8
코드를 저장할 디렉토리로 이동 한 후
django-admin startproject mysite
명령어를 실행하면 해당 디렉토리에 mysite 디렉토리가 생성된다. mysite 디렉토리의 내부 구조는 다음과 같이 생성된다.
mysite/ #1
manage.py #2
mysite/ #3
__init__.py #4
settings.py #5
urls.py #6
asgi.py #7
wsgi.py #8
바깥의 mysite 디렉토리는 프로젝트를 감싸고 있는 root 디렉토리이다. 이 디렉토리의 이름은 Django에 영향을 주지 않으니 원하는 걸로 바꿔도 무관하다.
Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티 입니다. manage.py 에 대한 자세한 정보는 django-admin and manage.py 에서 확인할 수 있습니다.
디렉토리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장됩니다. 이 디렉토리 내의 이름을 이용하여, (mysite.urls 와 같은 식으로) 프로젝트의 어디서나 Python 패키지들을 임포트할 수 있습니다. 바꾸면 안된다.
Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일입니다.
현재 Django 프로젝트의 환경 및 구성을 저장합니다. Django settings에서 환경 설정이 어떻게 동작하는지 확인할 수 있습니다.
현재 Django project 의 URL 선언을 저장합니다. Django 로 작성된 사이트의 "목차" 라고 할 수 있습니다. URL dispatcher 에서 URL 에 대한 자세한 내용을 읽어보세요.
현재 프로젝트를 서비스하기 위한 ASGI 호환 웹 서버의 진입점입니다. How to deploy with ASGI를 읽어보세요.
현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점입니다. How to deploy with WSGI를 읽어보세요.
python manage.py runserver # 서버 실행 명령어
python manage.py startapp polls
# 생성된 어플 디렉토리 구조
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
다음 단계는, 최상위 URLconf(mysite/urls.py)
에서 polls.urls
모듈을 바라보게 설정합니다. 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
들을 참조할 수 있도록 도와줍니다. Django
가 함수 include()
를 만나게 되면, URL
의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속 처리를 위해 include
된 URLconf
로 전달합니다.
include()
에 숨은 아이디어 덕분에 URL을 쉽게 연결할 수 있습니다. polls
앱에 그 자체의 URLconf(polls/urls.py)
가 존재하는 한, "/polls/"
, 또는 "/fun_polls/"
, "/content/polls/"
와 같은 경로, 또는 그 어떤 다른 root
경로에 연결하더라도, 앱은 여전히 잘 동작할 것입니다. include()
함수를 사용해야 할 때는 다른 URL 패턴을 포함할 때마다 항상 include()
를 사용해야 합니다. admin.site.urls
가 유일한 예외입니다.
path(route, view, **kwargs, name)
path()
함수에는 2개의 필수 인수인 route
와 view
, 2개의 선택 가능한 인수로 kwargs
와 name
로 정의되어 있다.
route
는 URL
패턴을 가진 문자열 입니다. 요청이 처리될 때, Django
는 urlpatterns
의 첫 번째 패턴부터 시작하여, 일치하는 패턴을 찾을 때 까지 요청된 URL
을 각 패턴과 리스트의 순서대로 비교합니다.
패턴들은 GET
이나 POST
의 매개 변수들, 혹은 도메인 이름을 검색하지 않습니다. 예를 들어, https://www.example.com/myapp/
이 요청된 경우, URLconf
는 오직 myapp/
부분만 바라 봅니다. https://www.example.com/myapp/?page=3
, 같은 요청에도, URLconf
는 역시 myapp/
부분만 신경씁니다.
Django
에서 일치하는 패턴을 찾으면, HttpRequest
객체를 첫번째 인수로 하고, 경로로 부터 '캡처된' 값을 키워드 인수로하여 특정한 view
함수를 호출합니다.
임의의 키워드 인수들은 목표한 view
에 사전형으로 전달된다.
URL
에 이름을 지으면, 템플릿을 포함함 Django
어디에서나 명확하게 참조할 수 있습니다. 이 강력한 기능을 이용하여, 단 하나의 파일만 수정해도 project
내의 모든 URL
패턴을 바꿀 수 있도록 도와줍니다.