15 Django App 만들기 - startapp

15.1 Django 앱 생성 - 앱 디자인

장고 프로젝트는 다수의 앱 으로 구성됩니다.
냉장고를 프로젝트로 생각하시고,
냉장고 안의 냉장보관용기를 앱으로 생각하시면 될것 같습니다.

앱을 만들어 봅니다.

python manage.py startapp "앱이름"

1
python manage.py startapp blog

15.2 앱 디렉토리 이동하기

pythonblog 디렉토리 밑에 blog 디렉토리가 생성되었습니다.

pythonblog에 myapp이란 폴더를 생성하고
myapp 속으로 blog 디렉토리를 이동시킵니다.

이제부터 app은 myapp 하위에서 관리합니다.!

15.4 base.py 설정 파일 변경

 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
34
35
36
37
38
39
40
41
#base.py
#BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_DIR      = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
APPS_DIR      = os.path.join(BASE_DIR, 'myapp') 
TEMPLATES_DIR = os.path.join(BASE_DIR, 'templates')

print('BASE_DIR : ',BASE_DIR)
print('APPS_DIR : ',APPS_DIR)
print('TEMPLATES_DIR : ',TEMPLATES_DIR)

.
.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp.blog'
]

.
.
.
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        "DIRS": [TEMPLATES_DIR],   
        #'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

저와 동일한 구조로 만들었다면 base.py(setting.py)도 변경해줘야 합니다.

1) 상단 부분에 있던 BASE_DIR을 주석처리 하거나 삭제 한 후에 BASE_DIR ,APPS_DIR , TEMPLATES_DIR 코드를 추가합니다. 2) INSTALLED_APPS 부분에 myapp.blog 를 추가합니다. 3) TEMPLATES 부분에 TEMPLATES_DIR을 추가합니다.

15.5 myapp/blog/urls.py - 인덱스 페이지 만들기

myapp/blog 밑에 urls 파일이 없다면 만드시면 됩니다.

아래와 같이 코드를 추가합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# myapp/blog/urls.py

from django.urls import path
from . import views

app_name = "blog"

urlpatterns = [    
path("index.do", views.index.as_view(), name="main"), 
]

localhost:8000/index.do가 호출되면
blog/views.py 의 index class가 실행됩니다..

15.6 config/urls.py - 인덱스 페이지 만들기

새로운 App을 만들면 아래와 같이 include 해주시면 됩니다.

1
2
3
4
5
6
7
8
from django.contrib import admin
from django.urls import path, include


urlpatterns = [
    path('admin/', admin.site.urls),
    path("", include("myapp.blog.urls")),
]

15.7 myapp/blog/views.py - 인덱스 페이지 만들기

함수 기반 뷰와 클래스 기반 뷰 2가지 방법이 있는데,
저는 클래스 기반 뷰를 더 선호하기 때문에
클래스기반 뷰로 작성되었습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from django.shortcuts import render
from django.views import generic
# Create your views here.

class index(generic.ListView):
    def __init__(self):
        self.title_nm       = "메인페이지입니다."
        self.ogImgUrl       = ""
        self.descript       = "메인페이지입니다."
        self.template_name  = "blog/index.html"

    def get(self, request, *args, **kwargs):        
        self.content = {"descript":self.descript,
                        "title_nm":self.title_nm,
                        "ogImgUrl":self.ogImgUrl,                       
                        "dataList":"[[[[ Hellow DJango ]]]]"}

        return render(request, self.template_name, self.content)

self.title_nm : 페이지 제목 및 헤더에 타이틀로 사용
self.ogImgUrl : 헤더에 og그래프 사용
self.descript : 헤더에 descript와 og그래프 사용
self.template_name: html 파일 위치와 파일명

localhost:8000/index.do 가 호출되면 index 클래스의 get 함수가 호출되면
render 함수에 의해 content 데이터와 template_name에 정의한 곳으로 이동 됩니다.

15.8 Djnago Server를 구동한 후 인덱스 페이지로 접근해봅시다.

장고 서버 실행 후 브라우저로 접속한 화면입니다.

url 생성부터 화면에 데이터를 과정 까지 만들어 보았어요. ^__^

15.8 templates/blog/index.html - 인덱스 페이지 만들기

위 그림과 같이 templates와 blog 디렉토리를 생성하고
index.html 페이지를 생성한다.

blog/views.py에서 넘긴 dataList 를 index 페이지 받으면 된다.

1
{{dataList}}