Django CBV 프로젝트 1. 기본 프로젝트 구조

참고 사이트

프로젝트 구성

# Project
minitutorial/        # 프로젝트의 루트 디렉토리입니다. 디렉토리이름은 변경하셔도 됩니다.
├── manage.py       # CLI에서 장고 프로젝트의 다양한 기능들을 사용할 수 있게 해주는 유틸리티입니다.
└── minitutorial/   # 실제 프로젝트 디렉토리입니다. 프로젝트의 설정을 할 수 있으며, 파이썬 패키지로 사용됩니다.
    ├── __init__.py # 파이썬 패키지에 필수로 들어있는 초기화 파일입니다. 프로젝트를 패키지로 불러올 때 가장 먼저 실행되는 스크립트입니다.
    ├── settings.py # 프로젝트 설정파일입니다.
    ├── urls.py     # 웹 url들을 view와 매칭시켜주는 파일입니다.
    └── wsgi.py     # WSGI 호환 웹 서버로 서비스할 때 실행되는 시작점입니다.


-------------------------------------------------

# APP
bbs/
├── __init__.py      # 앱 패키지 초기화 스크립트입니다.
├── admin.py         # 장고 어드민 설정파일입니다. 어드민에 등록된 모델은 장고에서 자동 생성하는 어드민 페이지에서 관리할 수 있습니다.
├── apps.py          # 앱 설정 파일입니다.
└── migrations/      # 데이터베이스 마이그레이션 디렉토리. 장고 ORM은 모델 스키마의 변화가 생길 때마다 migration 파일을 생성하고 이것을 통해 스키마를 업데이트 합니다. migration 파일을 통해 협업자들과 함께 데이터베이스의 스키마를 동기화할 수 있습니다.
    ├── __init__.py  # 마이그레이션 패키지 초기화 스크립트입니다.
    ├── models.py        # 앱 모델 파일입니다. 게시판의 모든 데이터를 저장할 데이터베이스를 장고 ORM을 통해 모델화합니다.
    ├── tests.py         # 앱 내의 기능들을 테스트하는 기능을 구현하는 파일입니다.
    ├── views.py         # 앱의 화면(template)과 데이터(model) 사이에서 사용자의 요청을 처리하여 모델에 저장하고, 모델에 저장된 데이터를 화면에 전달하는 역할을 합니다.
    └── templates/
            ├── base.html                # 기본 틀이 되는 html
            ├── article_list.html        # 게시글 목록이 보이는 html        
            ├── article_detail.html      # 특정 게시글이 보이는 html
            └── article_update.html      # 새로운 게시글이나 특정 글을 update 하는 html

프로젝트 생성

1
2
$ django-admin startproject minitutorial
$ python manage.py startapp bbs

모델 설계 M (Model)

게시글(Article) - 제목(title), 내용(content), 작성자(author), 작성일(created_at)

1
2
3
4
5
6
7
8
9
10
11
12
13
# bbs.models.py

from django.db import models

class Article(models.Model):
title = models.CharField('제목', max_length=126, null=False)
content = models.TextField('내용', null=False)
author = models.CharField('작성자', max_length=16, null=False)
created_at = models.DateTimeField('작성일', auto_now_add=True)

# toString()메소드와 비슷
def __str__(self):
return '[{}] {}'.format(self.id, self.title)

뷰 설계 V (View)

기능 - 글목록(list), 글상세보기(detail), 글수정(update), 글추가(new)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# bbs/views.py - CBV(Class Based View)

from django.http import HttpResponse
from django.views.generic import TemplateView


class ArticleListView(TemplateView): # 게시글 목록
template_name = 'base.html'

def get(self, request, *args, **kwargs):
ctx = {} # 템플릿에 전달할 데이터
return self.render_to_response(ctx)


class ArticleDetailView(TemplateView): # 게시글 상세
template_name = 'base.html'

def get(self, request, *args, **kwargs):
ctx = {}
return self.render_to_response(ctx)


class ArticleCreateUpdateView(TemplateView): # 게시글 추가, 수정
template_name = 'base.html'

def get(self, request, *args, **kwargs): # 화면 요청
ctx = {}
return self.render_to_response(ctx)

def post(self, request, *args, **kwargs): # 액션
ctx = {}
return self.render_to_response(ctx)

API 명세

URL METHOD Description Params Return
/article/ GET 글 목록 X [..{ Article }]
/article/create/ POST 새로운 글 작성 (Title & Content & Author)
article/article_id/ GET 글 상세보기 (Article_id) { Article }
article/article_id/update/ POST 글 수정 (Article_id)

cf) args & kwargs?
설명 해보자!

템플릿 설계 T (Templates)

├── base.html                # 기본 틀이 되는 html
├── article_list.html        # 게시글 목록이 보이는 html        
├── article_detail.html      # 특정 게시글이 보이는 html
└── article_update.html      # 새로운 게시글이나 특정 글을 update 하는 html