[Django] 1. Start my app(example)
시작
MVT
settings.py
M. models.py
urls.py
V. views.py
T. templates/*.html
- 파일의 위치를 잡을 때, 해당 파일이 프로젝트(
mysite
) 전체에 해당하는지, 앱(blog
) 하나에 속한 것인지를 구분해서 코딩해야함. - model은 앱에만 있음
project 생성
django-admin startproject mysite .
App 만들기
python manage.py startapp blog
Database 만들기
python manage.py migrate
관리자 계정 만들기
python manage.py createsuperuser
Setting
mysite/settings.py
setting에 App 등록
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.apps.BlogConfig' # <- `blog/apps.py` class
]
Template dir 지정
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # <- 폴더생성
'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',
],
},
},
]
Timezone
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_TZ = False #<- 한국에서 사용할거라면
Static 폴더 지정
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
모델 작성
blog/models.py
데이터 베이스 정의
from django.db import models
from django.urls import reverse
class Post(models.Model):
title = models.CharField(verbose_name='TITLE', max_length=50)
description = models.CharField('DESCRIPTION', max_length=100, blank=True, help_text='simple description text.') # 블랭크가 있어도 됨
content = models.TextField('CONTENT') #반드시 있어야함
create_dt = models.DateTimeField('CREATE DATE', auto_now_add=True) #자동으로 시간 생성
modify_dt = models.DateTimeField('MODIFY DATE', auto_now=True)
# tags =
# owner =
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('blog:post_detail', args=(self.id,)) # reverse: url을 만들어주는 함수. id는 자동으로 생성
def get_prev(self):
return self.get_previous_by_modify_dt() # 제공하는 method
def get_next(self):
return self.get_next_by_modify_dt()
데이터 베이스 테이블 생성
python manage.py makemigrations
데이터 베이스에 테이블 반영
python manage.py migrate
서버 테스트
python manage.py runserver
Url 세팅
view와 url연결
python manage.py runserver
view와 url연결
mysite/urls.py
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.HomeView.as_view(), name='home')
path('blog/', include('blog.urls'))
]
blog/urls.py
from django.urls import path
from blog import views
app_name = 'blog'
urlpatterns = [
path('post/list/', views.PostLV.as_view(), name='post_list'),
path('post/<int:pk>/', views.PostDV.as_view(), name='post_detail') # 이름을 pk로 하여 int로 바꾼후 view로 넘김
]
# 앞에는 /를 붙이지 않고 뒤에는 /를 붙여야함.
mysite에 homeview 만들기
mysite/views.py
home은 테이블과는 무관하고 템플릿을 보여주기 때문에 Templateview
를 상속함
from django.views.generic import TemplateView
class HomeView(TemplateView):
template_name = 'home.html'
blog에 view 만들기
blog/views.py
from django.views.generic import ListView
from django.shortcuts import render
from blog.models import Post
class PostLV(ListView): # 테이블에서 복수의 레코드를 가져올 때
model = Post
# templage_name = 'blog/post_list.html'
class PostDV(DetailView): # 테이블에서 특정 레코드 하나를 가져옴
model = Post
Template html 만들기
mysite/template/home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>home.html</title>
</head>
<body>
this is home.html
</body>
</html>
blog/template/blog/post_detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>post_detail.html</title>
</head>
<body>
this is post_detail.html
</body>
</html>
blog/template/blog/post_list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>post_list.html</title>
</head>
<body>
this is post_list.html
</body>
</html>
Author And Source
이 문제에 관하여([Django] 1. Start my app(example)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rlaengud123/Django-1.-Start-my-appexample저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)