[Django] 1. Start my app(example)

21386 단어 vuedjangopythondjango

시작

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연결

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>

좋은 웹페이지 즐겨찾기