EMDI는 지금도 개발중

Python with Django : 장고 웹 프로그래밍 model.py 설정하는 방법(2) 본문

언어/Python

Python with Django : 장고 웹 프로그래밍 model.py 설정하는 방법(2)

EMDI 2020. 6. 11. 14:59

1. 앱 생성하기 전 설정하기(settings.py)

# mySite에 있는 settings.py

TIME_ZONE = 'Asia/Seoul' #한국시간으로 변경

LANGUAGE_CODE = 'ko-kr'  #한국어로 변경

USE_TZ = False           #변경

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',
            ],
        },
    },
]

 

2. 앱 생성하기(settings.py)

# FINPM을 만드는 명령어 실행
(dJangoVenv) C:\dev\Python\finpmProject>python manage.py startapp fin

위의 명령어를 실행하면 내 프로젝트 폴더 내에 fin(설정한 앱이름)폴더가 생성되는 것을 확인할 수 있습니다. 또한 해당 폴더 내에는 app, models 등의 파일이 생성된 것도 확인할 수 있습니다.

 

fin 앱의 설정 클래스는 apps.py 파일에 FinConfig라고 정의되어있습니다. 프로젝트에 포함되는 애플리케이션들은 모두 설정파일에 등록해야하기에 FinConfig를 mySite의 settings.py에 설정하도록 합니다.

# mySite의 settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'fin.apps.FinConfig', #추가
]

 

3. 테이블정의하기(models.py)

from django.db import models
from django.urls import reverse

class Team(models.Model):
    # primary_key로 지정할 컬럼들은 꼭 primary_key=True 주기
    team_seq = models.CharField('team_seq', max_length=9, primary_key=True)
    team_nm = models.CharField('team_nm', max_length=50, blank=True)
    team_nick = models.CharField('team_nick', max_length=50, blank=True)
    team_mems_cnt = models.IntegerField('team_mems_cnt', default=0 )
    team_reg_dt = models.DateTimeField(max_length=8, auto_now=True)
    bigo = models.TextField('bigo', blank=True)
    use_yn = models.CharField('use_yn', max_length=1, default='Y')
    reg_dt = models.DateTimeField('reg_dt', max_length=14, auto_now=True)
    sort_order = models.IntegerField('sort_order', default=0 )

    def __str__(self):
        return self.team_nm

 

4. Admin 사이트에도 테이블 반영(admin.py)

from django.contrib import admin
from fin.models import Team

# Register your models here.
@admin.register(Team)
class TeamAdmin(admin.ModelAdmin):
    list_display = ('team_seq', 'team_nm', 'team_nick', 'team_reg_dt')
    search_fields = ('team_nm', 'team_nick')
(dJangoVenv) C:\dev\Python\finpmProject>python manage.py makemigrations fin
(dJangoVenv) C:\dev\Python\finpmProject>python manage.py migrate
(dJangoVenv) C:\dev\Python\finpmProject>python manage.py runserver

models.py에 설정한 테이블을 마이그레이션하면 PostgreSQL에 테이블 및 컬럼들이 생성되는 것을 확인할 수 있습니다. 

 

3. 화면 html 생성하기

1) templates 폴더 생성 및 html 파일 만들기

우선 html 파일들을 관리하는 templates폴더를 생성합니다. 앞으로는 html 파일들을 이 폴더 안에 관리하도록 하겠습니다. 그 다음은 templates 폴더 내에 index.html을 만듭니다.

<p>Hello! This is FinPM Page</p>

내용은 간단하게 위와 같이 작성하도록 하겠습니다.

 

2) views.py에 만든 html 연결하기

from django.shortcuts import render, redirect
from django.views.generic import TemplateView, ListView, DetailView

from .models import Team
from .forms import TeamCreate
from django.http import HttpResponse

# Create your views here.
# 클래스 뷰 또는 함수형 뷰 중 하나를 선택해서 쓰세요.
# Class-Based Views
class IndexView(TemplateView):
    template_name = 'index.html'

#----------------------------------------------------------------
# Function-Based Views
def index(request):
    return render(request, 'index.html')

장고의 뷰(view)에서는 클래스 기반 뷰와 함수 기반 뷰가 있습니다. 클래스 뷰는 class IndexView(TemplateView): 와 같이 사용하고 함수형 뷰는 def index(request): 와 같이 사용합니다. 둘 중 어떤걸 쓰든 상관은 없으며, 본인이 원하는 것을 선택하여 사용해주세요.

 

2) urls.py에 해당 뷰 path 등록하기

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
import fin.views

urlpatterns = [
    path('admin/', admin.site.urls),
    # 추가로 생성한 urls
    path('', IndexView.as_view(), name='index'), # 클래스 기반 뷰를 선언했을 경우 이것
    path('', fin.views.index , name='index'), # 함수 기반 뷰를 선언했을 경우 이것
]

127.0.0.1:8000 홈페이지를 새로고침을 하면 아까 전에 만들었던 html을 확인할 수 있습니다. 여기까지하니 이제 대충 흐름이 이해가 되네요! 다음 글에서는 index.html의 내용에 대해 다루어보도록 하겠습니다.

Comments