15 Django App 만들기 - startapp
15.1 Django 앱 생성 - 앱 디자인
장고 프로젝트는 다수의 앱 으로 구성됩니다.
냉장고를 프로젝트로 생각하시고,
냉장고 안의 냉장보관용기를 앱으로 생각하시면 될것 같습니다.
앱을 만들어 봅니다.
python manage.py startapp "앱이름"
python manage.py startapp blog
15.2 앱 디렉토리 이동하기
pythonblog 디렉토리 밑에 blog 디렉토리가 생성되었습니다.
pythonblog에 myapp이란 폴더를 생성하고
myapp 속으로 blog 디렉토리를 이동시킵니다.
이제부터 app은 myapp 하위에서 관리합니다.!
15.4 base.py 설정 파일 변경
#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 파일이 없다면 만드시면 됩니다.
아래와 같이 코드를 추가합니다.
# 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 해주시면 됩니다.
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가지 방법이 있는데,
저는 클래스 기반 뷰를 더 선호하기 때문에
클래스기반 뷰로 작성되었습니다.
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에 정의한 곳으로 이동 됩니다.