Django란 무엇인가? 

[출처] https://tutorial.djangogirls.org/ko/django/

 

파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크(web application framework)

 

웹 서버 요청이 오면, 장고 urlresolver가 url를 통해 경로를 파악하고, 요청사항을 view(함수 모음)에 전달하면, view가 함수를 통해 db에서 데이터 정보를 찾아, model 정보를 거쳐, template에 렌더링하는 방식으로 처리하는 프레임워크이다.

 

Django의 프로젝트와 앱 개념 

- 프로젝트 : 내가 만들려고 하는 전체 프로젝트
- 앱 : 그 안에 들어가는 각각의 카테고리 또는 상위 기능들 (ex. 회원인증, 메신저 발송)

 

출처 https://dogfighterkor.tistory.com/4

Django의 MTV(Model, Template, View) 개념 

- 모델 : 앱의 데이터와 관련된 부분 (DTO 또는 Entity의 개념)
- 템블릿 : 사용자에게 보여지는 부분 (html)
- 뷰 : 모델 데이터를 템블릿으로 전달하거나, 템플릿에서 발생하는 이벤트 처리 (요청 및 응답 처리)
   ㄴ 뷰는 다시 1) 클래스형 뷰, 2) 함수형 뷰로 나뉜다.

 

Django 프로젝트를 위한 사전 설치

 

1. 사전 세팅

1) 파이썬 설치 https://www.python.org/downloads/ 
    * <주의> PATH 추가 꼭 체크하기! - 안 그러면 따로 추가해야함
2) VS Code 설치 (또는 pycharm)

 

2. 가상환경 설정

python3 --version           # 파이썬 버전확인 
python3 -m venv myvenv      # 나의 가상환경 설정

#Mac
source myvenv/bin/activate  # 맥은 bin 폴더를 통해 실행 가능 

#Window
.\myvenv\Scripts\activate.bat # 윈도우는 Scripts 폴더를 통해 실행 가능

 

3. Django 설치 

pip install django~={{파이썬 버전}}

 

 

Django 프로젝트 시작하기

1. Django 프로젝트 시작

django-admin startproject myweb .  # myweb이라는 프로젝트로 시작 끝에 . 안 찍으면 안 됨

 

2. Django 프로젝트 내 App 설치 및 서버 실행해보기

python manage.py startapp aidiary # aidiary라는 app을 설치
python manage.py runserver        # 서버 실행

 

3. Django 설정 - 프로젝트 설정에 내가 만든 App 추가하기 

 

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'aidiary'                      # 앱 추가 
]
TIME_ZONE = 'Asia/Seoul'           # 타임존 추가

 

여기에 추가적으로 디버깅 모드나 호스트에 대한 설정도 같이 할 수 있었습니다.

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True           # 요건 디버깅 옵션임. 보안상 배포할 땐 false로 바꿔야함

ALLOWED_HOSTS = []     # 기본 default로 127.0.0.1이 들어가 있음. 
# ALLOWED_HOSTS = ['127.0.0.1', 'localhost'] # 저는 까먹지 않기 위해 넣어놨어요.

 

4. 프로젝트에 App의 url 설정 정보 추가하기 

 

프로젝트의 urls.py 파일은 전체 App들에 대한 url 경로에 대한 설정을 해요.

App에도 urls.py 파일이 있는데 App에서 설정한 url 정보를 프로젝트의 urls.py안에 include 시켜줄 수 있었습니다.

 

> aidiary의 urls.py 파일 정보

from django.urls import path
from . import views

urlpatterns = [
    path('', views.diary_list, name='diary_list'),
    path('diary/<int:pk>/', views.diary_detail, name='diary_detail'),
    path('diary/post/', views.diary_post, name='diary_post'),
    path('diary/<int:pk>/edit', views.diary_edit, name='diary_edit'),
]

 

> myweb의 urls.py 파일 정보

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('aidiary.urls')),
]

 

 

모델 생성하기 - What is migration?

 

1. 마이그레이션 개념

마이그레이션 : 모델을 데이터베이스에 적용시키는 과정 

> makemigrations : 모델의 생성 및 변경 사항에 대한 기록을 파일로 저장하는 것 -- ({{내 앱}}/migrations)에 저장됨
> migrate : makemigrations를 통해 생성된 파일을 실제로 실행하는 것
python manage.py migrate # 마이그레이트를 하겠다 = 모델을 DB에 반영하겠다

 

초반에 runserver를 하고 나면 이 migrate관련 에러가 뜨는데, 이는 모델에 대한 migrations를 안 해줬다는 경고였어요. 그래서 위 코드를 먼저 작성하면 해결할 수 있었습니다. 

 

2. 어드민 페이지 들어가보기 

아래의 코드를 통해서 수퍼 계정을 만들고 121.0.0.1:8000/admin 으로 들어가면 어드민 페이지가 나왔습니다. 거기서 데이터베이스에 대한 관리가 가능해요. 스프링과 다르게 DB 연동을 사전에 안 해도 어드민 페이지를 통해 테스트 과정에서 바로바로 데이터를 입출력할 수 있다는 게 정말 효율적이더군요.

python manage.py createsuperuser  # 최상위 어드민 계정 생성

 

 

3. 모델 생성하기 

 

App 폴더 하위에 보면 models.py가 있어요. 거기에 모델을 작성해주면 되는데 class 형태로 작성하고, django.db의 models를 사용합니다. Django도 스프링처럼 Orm을 사용해요. 하지만 스프링과 달리, django에서는 entity와 dto에 대해서 명시적인 구분을 따로 하지 않더라고요. (ex. @Table이나 @Entity를 통한 분리) 이 부분은 제가 좀 더 공부하면서 명시적인 구분을 하는 방법이 있는지 보려고 합니다. 

 

4. 모델 생성 및 변경 사항 적용하기 

 

모델 생성이 완료되었다면 이제 이걸 마이그레이션 할 차례입니다.

python manage.py makemigrations  
python manage.py migrate

이 기능이 진짜 좋은게, migrations 폴더 하위를 보면 변동사항이 생길 때마다 이렇게 무슨 짓(?)을 했는지가 기록으로 남아 있어요. 전체적인 수정사항을 확인할 수 있어서 좋다는 생각을 했습니다. 

 

5. 모델 어드민 페이지에 적용하기 

 

App 폴더 하위에 보면 admin.py 파일이 있어요. 거기에 위처럼 admin.site.register(Diary) 요렇게 생성한 모델을 적용해두면, 어드민 페이지에 Diary에 대한 CRUD 작업을 할 수가 있습니다.

 

 

본격적인 작업을 시작하기 전에

1. templates 폴더는 App 폴더 하위에 만들어주기

 

App 폴더 바로 아래에 templates 폴더를 만들고 그 안에 html 작업을 해주어야 정상적으로 view에서 경로를 찾을 수 있었어요.

 

2. models.py, urls.py 파일들이 없다면 각각 만들어주기 

 

책에서는 models.py 외에도 forms.py를 따로 만들어주기도 했어요. 저는 처음에 models.py만 사용해보았는데, 상황에 따라 파일을 만들어주시면 될 것 같습니다. 

 

모델 -> 템플릿 -> 뷰 -> Url 순서로 작업하기

책에 나와 있는대로 저는 모델 - 템플릿 - 뷰 - url 순서로 다이어리 프로젝트를 만들어봤어요. 이전에 스프링으로 구현을 해봤어서 따로 설계는 필요 없었기에 여러 사이트에서 디자인 아이디어를 찾아 AI를 활용하여 Html 템플릿을 만들어보았습니다. 현재까지 구현된 바는 아래와 같아요.

 

 

 

[출처 및 참고] 백엔드를 위한 Django Rest Framework with 파이썬 - 권태형 저

+ Recent posts