※ 본 글은 영진닷컴
에서 출간한 권태형
저자의 『백엔드를 위한 DJANGO REST FRAMEWORK with 파이썬』
책을 읽고 작성하였습니다.
Photo App
만들기Project
및 App
이름은 board
라고 설정하였음.config
폴더 내 settings.py
파일에 board
앱 추가.TIME_ZONE
도 ASIA/Seoul
로 설정 INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"rest_framework",
# APP
"board",
]
...
TIME_ZONE = "ASIA/Seoul"
Django
프로젝트 구조 살펴보기.Django
에서 Project
와 App
은 개발자가 정의하고 사용하는 것에 따라 그 구성이 달라질 수 있음.
Project
는 말 그대로 어떤 하나의 서비스
App
은 Project
내 기능과 같은 요소들을 일정한 기준으로 나눠 놓은 단위
SNS를 만든다고 가정 했을 때, 그것은 하나의 Project
가 됨.
회원관련 내용 ▶ 가입/로그인/친구 맺기 피드 관련 내용 ▶ 글쓰기/삭제하기/수정하기/공유하기
프로젝트 확장도 용이
회원관련 내용 ▶ 가입/로그인/친구 맺기 피드 관련 내용 ▶ 글쓰기/삭제하기/수정하기/공유하기 ▶ 채팅 보내기/채팅 받기/차단하기 등
<photo> 삽입 예정
App
이라고 부르게 됨.Django
프로젝트 구성요소 살펴보기.Project
의 전반적인 구조에 대해 살펴보기!
startproject
와 startapp
명령어를 통해 각각 프로젝트와 프로젝트 내부에 들어갈 앱을 config
와 board
로 생성하였음..secrets
폴더도 생성하여 secret key
관련 작업도 진행했음.manage.py
Django
프로젝트 중 Django
와 관련된 여러 가지 명령어를 써야할 때 사용하는 파일
- poetry run python manage.py runserver
- poetry run python manage.py migrate
manage.py
파일은 django.core.management
모듈부터 execute_from_command_line
이라는 함수를 가져와 사용자가 입력하는 명령어를 처리하는 일을 하고 있음.manage.py
파일은 우리가 건드릴 일이 없고, 그저 명령어를 처리해 주는 파일로만 알고 넘어가면 됨.Config
폴더startproject
로 만들어진 이 폴더에는 Django
프로젝트의 설정 및 기본적인 기능을 위한 파일들이 있음..py
파일이 존재하는데, 앞으로 사용하게 될 파일은 config/settings.py
와 config/urls.py
뿐임.1.
settings.py
- 프로젝트 설정 파일로, 자주 사용되는 옵션은 다음과 같음.
- 디버깅 모드 :
DEBUG = True
True
로 켜놓으면 디버깅 모드가 됨.- 우리가 만든 웹 결과물에서 어떤 페이지나 기능에서 에러가 났을 때, 그 에러에 대한 메시지가 웹 페이지에 그대로 노출되는 것을 의미.
- 개발할 때는 이를 보면서 에러를 고쳐나갈 수 있으나, 실제 배포 시에는 보안을 위해 이를 켜놓고 배포하면 안됨.
- 나중에 배표 시에는 반드시 꺼놓고 배포해야 함.
ALLOWD_HOST = []
- 허용할 호스트 주소에 대한 내용 넣기
- 호스트 주소 : 우리가 만든
Django
프로젝트가 돌아가는 환경에 접속할 수 있는 주소- 현재 로컬 환경에서
Django
프로젝트를 실행하면 로컬 호스트 주소인 http://127.0.0.1:8000 에서 실행됨.- 이후에 프로젝트 배포 시에는 배포하는 서버의 호스트 주소를 여기에 입력해야 프로젝트로 접속할 수 있게 됨.
INSTALLED_APPS
- 설치된 앱을 등록하는 옵션
Django
프로젝트에서 사용할, 만든 앱들을 여기 선언해 주어야 등록이 되어 프로젝트에서 정상적으로 적용이 됨.INSTALLED_APPS
- 설치된 앱을 등록하는 옵션
Django
프로젝트에서 사용할, 만든 앱들을 여기 선언해 주어야 등록이 되어 프로젝트에서 정상적으로 적용이 됨.
2. urls.py
- 프로젝트의 url 주소를 등록해놓는 파일.
- 내부에 보면 아래와 같은 내용이 있음.
from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
- 위와 같이 path()를 통해 원하는 주소를 등록할 수 있음.
DJango
앱 구조로 알아보는 MTV 패턴board
앱 폴더를 보면, 총 6개의 파이썬 파일들과 migrations
라는 폴더가 있음. board
├── migrations
│ └── __init__.py
├── admin.py
├── apps.py
├── models.py
├── test.py
├── urls.py
└── views.py
Django
에서는 MTV 패턴으로 전반적인 개발을 진행.
- 어떤 패턴으로 개발을 진행한다는 것은,
- 작업을 함에 있어 어느정도 규칙과 같이 정해진 방식이 있고, 그 방식을 따라가며 중간중간 방식이 요구하는 내용을 순서대로 채워 넣으며 개발을 진행한다는 개념
- 개발 패턴에는 여러 종류가 있음.
MTV
패턴은 Model(모델)
, Template(템플릿)
, View(뷰)
의 약자임.Model
: 앱의 데이터와 관련된 부분을 다룸.Template
: 사용자에게 보이는 부분을 다룸View
: Model
과 Template
사이에서 Model
의 데이터를 Template
로 전달하고 Template
에서 발생하는 이벤트를 처리하는 부분을 다룸.<photo> 삽입 예정
Django Model
알아보기Django
에서 model
은 App
의 Data
와 관련된 부분을 다루는 영역model
은 Database
에 저장될 Data
의 모양을 정의하고 관련된 일부 기능들을 설정해 주는 영역Database
의 Table
과 같은 구조model
형태의 Data
들을 Database
에 쌓으면 Database Table
이 됨.model
델을 Database
에 적용시키면 그것은 table
이 되는 것!!migration
: model
을 Database
에 적용시키는 과정Django model
만들기python
으로 개발을 하고 있으니 model
을 하나의 class
로 만들 수 있음.models.py
에서 작성.model
클래스에서는 속성을 정의하고 각 속성에 대한 세부 설정을 진행 class Photo(models.Model):
title = models.CharField(max_length=50)
author = models.CharField(max_length=50)
image = models.CharField(max_length=200)
description = models.TextField()
price = models.IntegerField()
def __str__(self):
return f"{self.title}의 저자는 {self.author}!!!!"
class Meta:
verbose_name = "사진"
verbose_name_plural = "사진 목록"
사진 모델을 Photo
라는 클래스로 정의하였는데, 일반적인 클래스와 살짝 다른 점은 models.Model
을 상속받았다는 점과 각 속성들을 models
를 사용해 정의하였다는 점임.
djago.db
로부터 models
를 가져오는데, models
는 Django
의 데이터베이스와 관련된 내용을 미리 작성해놓은 도구임.
따라서 필요한 모델을 생성할 때 models.Model
이라는 클래스를 상속받아서 그 기능을 그대로 가져다 쓸 수 있으며, 예시에서 나온 CharField
, TextField
, IntegerField
와 같은 필드 설정도 그대로 쓸 수 있음.
CharField
: 문자열(길이제한 필요)IntegerField
: 정수TextField
: 문자열(길이제한 필요 없음)DateField
: 날짜DateTimeField
: 날짜 + 시간FileField
: 파일ImageField
: 이미지파일ForeginKey
: 외래 키(관계)OneToOneField
: 1대1 관계ManyToManyField
: 다대다 관계
클래스 생성 시 사용한 내용들 추가로 살펴보기
__str__
메서드의 역할
- 해당 클래스로 만들어진
instance
자체를 출력할 때, 문자열로 설명해주기 위한 메서드!Django
의models.py
에서는class
가admin
페이지에서 어떻게 출력되는지를 정의해주는 역할Meta
내부 클래스 옵션
verbose_name
옵션
- 사용자가 읽기 쉬운 모델 객체의 이름으로 관리자 화면 등에서 표시됨.
- 영어를 기준으로 단수형임.
verbose_name
옵션을 지정하지 않으면 클래스 이름을 기준으로 모두 소문자로 변경하여 표시됨verbose_name_plural
옵션
- 사용자가 읽기 쉬운 모델 객체의 이름으로 관리자 화면 등에서 표시되는 것은 동일하나 영어를 기준으로 복수형
- 한국어에서는 굳이 단수와 복수를 구별해 사용하지 않으므로
verbose_name
과 동일하게 사용 가능.verbose_name_plural
옵션을 지정하지 않으면verbose_name
에s
를 붙임.ordering
옵션
- 모델의 정렬 순서를 지정하며 여러 개를 지정할 경우 필드 이름을 리스트로 나열.
- 기본값은 오름차순으로 정렬하고
-
를 붙이면 내림차순으로 정렬.- 다음 예시는
pub_date
필드 기준 내림차순으로 정렬하고 다시author
필드를 기준으로 오름차순 정렬.
ordering = ['-pub_date', 'author']
Django model
적용시키기
makemigrations
- 우리가 모델을 변경한 내용을 기록하여 파일로 만들어주는 과정
board/migrations
폴더 내에 생기는 파일들이 바로 이 과정으로 만들어지는 파일migrate
makemigrations
에서 생성된 파일을 실제로 실행시켜 실제 데이터베이스에 변경 내용을 적용시켜주는 과정
models.py
에서 수정한 내용은 makemigrations
와 migrate
과정을 거쳐 실제 db파일
까지 반영이 됨.Django
모델 admin
페이지 적용board/admin.py
에 들어가면 Register your models here.
라는 안내문이 있음. from django.contrib import admin
from .models import Photo
# Register your models here.
admin.site.register(Photo)
from .models import Photo
board/models.py
를 위와 같이 불러오고 그 안에 있는 Photo
클래스를 불러옴.admin.site.register(Photo)
admin
페이지에 Photo
모델을 등록Django
의 모델이며, 실제로 사용되는 모델은 훨씬 복잡하고 기능도 다양함.Django
에서 모델을 만드는 것이 절반이라고 얘기할 정도로 모델은 중요함!!!!Django Template
알아보기Django
에서 Template
은 사용자에게 보이는 부분
사용자에게 보이는 부분
이라는 것은 웹 페이지 골격, 즉 HTML
로 작성된 부분이라는 것을 의미Front
개발 영역에 포함됨!!Django Template
의 특징
- 일반적인
HTML
작성과 99% 동일하며 1%의 차이는Template Tag
작성에 있음.Django
의Template Tag
는HTML
이 파이썬 코드로부터 (즉,Django
프로젝트로부터) 데이터를 바로 넘겨받아서 손쉽게 처리할 수 있는 도구
HTML
로 웹 페이지를 만들면HTML
은 그저 마크업 언어이므로 정적인 웹 페이지를 보여주기만 함.- 데이터를 넘겨받아서 웹 페이지로 보여주기 위해서는
Javascript
와 같은 도구가 도와주어야 하는데,Django
에서는 아주 편하게도Python
으로부터 바로 데이터를 넘겨받을 수 있도록 하는Template tag
가 있음.Template Tag
는{}
로 감싸는 형태로 생겼음.
{}
안에 데이터를 넣을 수도 있고, 심지어for
이나if
와 같은 파이썬의 기본적인 구문도 사용할 수 있어 쓰면 쓸수록 아주 편한 기능!!
Django Views, URL
알아보기Django View
Django
의 View
는 Template
과 Model
사이를 이어주는 다리와 같은 역할.View
는 Model
을 통해 Data
에 접근하여 Template
으로부터 요청받은 데이터를 뽑아와 Template
에게 답변을 보내줌. Front-end
가 Back-end
에게 Data
를 요청했을 때, 백엔드에서 데이터를 뽑아서 프론트엔드에게 제공해주는 과정을 View
에서 처리하고 있음Django
에서 제일 핵심이 Model
이었다면, Code
에서 제일 많은 비중을 차지하는 것은 View
임.View
를 만드는 방법은 다양함.FBV(함수형 뷰)
와 CBV(클래스형 뷰)
가 있음.Django URL
URL
: 웹 브라우저에서 특정 웹사이트로 이동하기 위해 입력하는 주소URL
은 라우팅의 역할과 동시에 서버로 해당 주소에 할당된 리소스를 요청하는 역할을 함.HTML
페이지 뿐만 아니라, 내부를 채우는 데이터 등을 포함하는 개념Django
에서 URL
은 이와 크게 다르지 않음.