이 글은 Django Docs 내 튜토리얼을 정리한 글입니다.
이제 앱을 만들어보자. 앱은 특정 기능을 하는 작은 웹 어플리케이션을 의미하고, 우리가 아까 만들었던 mysite는 앱들이 모인 프로젝트이다.
앞에서 만들었던 mysite의 submodule이 아니라, manage.py와 같은 디렉토리에서 또다른 모듈을 만들 수 있음.
python manage.py startapp polls
위 명령어로 별도의 polls 폴더를 만들 수 있다.
이제 Views 파일을 만들어보자(요청 처리 및 주요 로직이 담긴 파일)
# polls/views.py
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
이를 호출하기 위해서는 urls.py라는 파일이 필요하다.
→ 생성해주자.
# polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
그런 다음, 이 앱을 프로젝트에서 접근할 수 있게 만들어보자. 그러려면 mysite/urls.py에서 urlpatterns 리스트를 만들어주어야 한다.
# 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를 참조하는 것을 허용한다.
이는 plug-and-play URL을 쉽게 하기 위함이다. polls가 urls.py를 가지고 있는 한, 어떤 폴더 내(e.g. /fun_polls/polls/urls.py)에 위치하든 접근할 수 있다!
위에서 쓰인 path() 함수는 네 가지 인수를 받을 수 있다.
이제 mysite/settings.py로 가보자. 이는 Django 셋팅을 대표하는 모듈 수준의 변수들이 담진 일반적인 파이썬 모듈이다.
기본적으로, SQLite를 사용한다. DB가 처음이라면 가장 쉬운 선택지 중 하나이다. 그러나, 만약 진짜 프로덕션 레벨의 프로젝트를 시작하려면, PostgreSQL과 같은 확장성 높은 DB를 써야 할 것이다.
만약 다른 DB를 쓰고 싶다면, 올바른 database binding을 설치하고 DATABASE ‘default’ 아이템 내 키를 바꾼다.
또한 다른 DB를 쓰는 경우 USER, PASSWORD, HOST와 같은 추가 설정이 추가되어야 한다. 자세한 설명은 링크 참조.
SQLite 말고 다른 DB를 쓸 때, DB interactive prompt에서 “CREATE DATABASE database_name”을 사용하여 데이터베이스를 생성한다.
또한 mysite/settings.py에서 “create database” privilege가 있는지 확인해라.
INSTALLED_APPS는 Django 인스턴스에 활성화된 모든 Django 어플리케이션을 나타낸다.
위는 기본적으로 포함되는 앱들이다. 이 앱들은 데이터베이스 테이블을 필요로 하므로, DB에 테이블을 생성해야 한다.
생성 명령:
$ python manage.py migrate
이 명령은 무슨 뜻일까?
→ INSTALLED_APPS의 DB 설정을 확인하고, DB 설정에 따라 필요한 DB 테이블을 생성하며 앱으로부터 DB 마이그레이션을 실시(나중에 더 자세히 다룰 것).
만약 기본 제공된 앱을 빼고 싶다면, 위 명령을 실행하기 전에 settings.py 내 INSTALLED_APPS에서 빼고 싶은 앱 제거.
모델을 정의하려면, DB 레이아웃과 추가 메타데이터가 필요하다.
이에 대한 Django의 철학은 다음과 같음.
예시로 만드는 투표 앱에서는 두 가지 모델을 쓸 것:
: Question & Choice
이는 파이썬에서 다음과 같이 클래스로 표현된다.
# polls/models.py
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField("date published")
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
Django에서 각 모델은 django.db.models.Model의 하위 클래스로 정의됨. 각 모델은 클래스 변수를 여러 개 가지고 있고, 클래스는 모델 내 데이터베이스 필드를 나타낸다.
각 필드는 Field 클래스의 인스턴스로 나타내어진다
e.g. CharField, DateTimeField, IntergerField, …
이는 각 필드가 어떤 유형의 데이터를 담고 있는지 알려준다.
question, choice_text와 같은 변수 이름 : DB에서 열 이름으로 사용됨.
위에서 Choice가 Question과 연결되어 있다고 했는데, 이는 ForeignKey를 통해 표현됨. Django에서는 이러한 DB 간 관계 표현이 매우 자유로움 - many-to-one / many-to-many / one-to-one
Django (2) Major Components (0) | 2023.06.11 |
---|---|
Django (1) 기본 개념 및 설치 방법 (0) | 2023.06.11 |