Django 시작! 프로젝트 생성 및 Django 앱 작성
Django로 프로젝트를 시작하기 전에 앞서
어느정도 Django에 대해 알고 시작해야 따라가기 수월하지 않을까 싶어 연습해보려 한다.
우선 Python과 Django를 설치했다
샘플 project를 만들어보려 한다.
프로젝트 생성
$ django-admin startproject mysite(프로젝트명)
cd 명령으로 코드 저장할 디렉토리로 이동 후, 위의 명령을 수행하면
해당 위치에 디렉토리가 생성된다!
startproject 명령어로 무엇이 생성되는가?
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
- manage-py : 장고 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티
- mysite/ : 디렉토리 내부엔 프로젝트를 위한 실제 Python 패키지들이 저장된다. 이 디텍토리 내의 이름을 이용해(mysite.urls와 같이) 프로젝트의 어디서나 Python 패키지들을 import 할 수 있다.
- mysite/ __init__.py : Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 빈 파일.
- mysite/ settings.py : 현재 장고 프로젝트의 환경/구성을 저장함
- mysite/ urls.py : 현재 장고 프로젝트의 URL 선언 저장. 장고로 작성된 사이트의 "목차"라고 생각하면 됨
- mysite/ asgi.py : 현재 프로젝트를 서비스하기 위한 ASGI-호환 웹 서버의 진입점
- mysite/ wsgi.py : 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점
개발 서버
Django 프로젝트 제대로 동작하는 지 확인하기 위해
mysite 디렉토리로 이동 후, 명령어 입력
$ python manage.py runserver
위와 같이 Django 개발 서버 시작됨!
개발 서버는 순수 파이썬으로 작성된 경량 웹 서버이다.
http://127.0.0.1:8000/ 로 가보면,
아래와 같은 화면이 뜬다! (잘 동작한다는 뜻)
기본적으로,
runserver 명령은 내부 IP의 8000번 포트로 개발 서버를 띄운다.
이 서버의 포트를 변경하고 싶다면, 커맨드라인에서 바꿔주면 된다. 예로, 8080으로 바꾸고 싶다면
아래의 명령을 입력한다.
$ python manage.py runserver 8080
서버의 IP를 변경하고려면, 포트와 함께 적어준다.
예로, 사용 가능한 모든 공용 IP를 청취하려면 아래의 명령을 입력한다.
$ python manage.py runserver 0:8000
이상으로 프로젝트 환경 설정 완료!
Django는 app의 기본 디렉토리 구조를 자동으로 생성할 수 있는 도구를 제공하므로, 코드에만 집중할 수 있다는 장점이 있다.
프로젝트 vs 앱 ?
앱은 블로그 시스템, 공개 기록 db, 혹은 소규모 설문조사 앱 같은 작업을 수행하는 웹 어플리케이션이다.
반면 프로젝트는 특ㄹ정 웹 사이트에 대한 구성 및 앱의 모음이다.즉, 한 프로젝트에 여러 개의 앱이 포함될 수 있고, 앱은 여러 프로젝트에 있을 수 있다.
앱을 생성하기 위해, 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/view.py에 코드 작성
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 디렉토리의 urls.py 파일은?
뷰를 호출하기 위해 URL이 있어야 하므로 그를 생성하기 위함임!
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 리스트에 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의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속 처리를 위해 include된 URLconf로 전달한다.
include() 덕에 URL을 쉽게 연결할 수 있다!
pollls 앱에 그 자체의 URLconf(polls/urls.py)가 존재하는 한,
"polls/" 혹은 "/fun_polls", "/content/polls" 와 같은 경로 또는 그 어떤 다른 root 경로에 연결해도 앱은 잘 동작할 것이다.
** include()는 언제 사용?
다른 URL 패턴을 포함할 때마다 항상! include() 사용해야함.
admin.stie.urls가 유일한 예외임
이제 index뷰가 URLconf에 연결되었을 것이다.
작동을 확인하기 위해서는 아래 명령을 입력한다.
$ python manage.py runserver
path() 함수엔
2개의 필수 인수인 route와 view,
2개의 선택 인수 kwargs와 names 까지 모두 4개의 인수가 전달된다.
path() 인수 : route
route는 URL 패턴 가진 문자열로,
요청이 처리될 때 장고는 urlpatterns의 첫 번째 패턴부터 시작해 일치하는 패턴을 찾을 때 까지 요청된 url을 각 패턴과 리스트의 순서대로 비교한다.
패턴들은 GET 이나 POST의 매개 변수들, 혹은 도메인 이름을 검색하지 않는다.
예로, https://www.example.com/myapp/ 이 요청된 경우, URLconf 는 오직 myapp/ 부분만 본다.
https://www.example.com/myapp/?page=3, 같은 요청에도, URLconf 는 역시 myapp/ 부분만 본다.
path() 인수 : view
장고에서 일치하는 패턴을 찾으면,
HttpRequest 객체를 첫 번째 인수로 하고, 경로로부터 '캡처된'값을 키워드 인수로해
특정한 view 함수를 호출한다.
path() 인수 : kwargs
임의의 키워드 인수들은 목표한 view에 사전형으로 전달된다.
path() 인수 : names
URL에 이름 지으면, 템플릿을 포함한 장고 어디서나 참조할 수 있다.
이 기능을 이용해, 단 하나의 파일만 수정해도 프로젝트 내 모든 URL 패턴을 바꿀 수 있도록 도와준다.