본문으로 바로가기

장고를 활용한 웹사이트 만들기(2)

category Data Science/Python 2016.05.13 23:39

MVC 패턴(Model View Controller Pattern)

조율, 데이터, 화면으로 프로그램을 구성하는 방식

Model(데이터) - models.py

  • Candidate 클래스의 형식대로 데이터를 DB에 저장, 불러옴

View(화면) - templates

  • 화면에 어떤 장면을 보여줄지를 결정

Controller(조율) - views.py

  • Candidate 모델에서 데이터를 읽어, index.html에 전달

! Django에서는 controller(조율)를 views.py에서 담당하고, View(화면)를 templates에서 담당합니다. 헷갈리지 않게 주의하세요.

장고는 왜 MVC프레임워크를 따르면서 컨트롤러를 view라고 부르는지에 대한 답변(영어)

models.py에는 모델 클래스를 여러 개 정의할 수 있고, 모델 간의 관계를 나타낼 수 있습니다.

1. 새로운 모델을 models.py에 정의합니다.

# C:\Code\mysite\elections\models.py

# 기존 코드 유지

class Poll(models.Model):
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()
    area = models.CharField(max_length = 15)

class Choice(models.Model):
    poll = models.ForeignKey(Poll) #Poll 모델의 id를 이용
    candidate = models.ForeignKey(Candidate)
    votes = models.IntegerField(default = 0)

2. admin에서 Poll 모델을 사용하기 위해, admin.py에 Poll을 등록(regist)합니다.

# C:\Code\mysite\elections\admin.py

from django.contrib import admin
from .models import Candidate, Poll


admin.site.register(Candidate)
admin.site.register(Poll)

3. 모델 등록

migration 파일을 만든 후 - migration 파일을 DB에 반영 - runserver 과정을 밟습니다.

powershell 등에서 manage.py가 있는 디렉토리로 이동 후,

  1. python manage.py makemigrations
  2. python manage.py migrate
  3. python manage.py runserver

브라우저에서 localhost:8000/admin으로 접속하면 Poll을 등록할 수 있습니다.


영상에서 쓰인 필드 클래스를 간략히 설명하면,

DateTimeField

date(날짜)와 time(시간)을 나타내며, python의 datetime.datetime 인스턴스로 표현됩니다.

CharField

string을 나타내며, 필수 인자 max_length가 있습니다.
길이가 긴 문자열을 저장하려면 TextField 등을 쓰세요.

  • CharField.max_length : 해당 필드의 최대길이를 설정합니다. 예를 들어 5로 설정하면 5글자 이하로만 저장할 수 있습니다.

IntegerField

정수를 나타냅니다.
이 필드는 Django가 지원하는 모든 데이터 베이스에서 -2147483648에서 2147483647까지의 정수를 안전하게 저장합니다.
더 큰 정수는 BigIntegerField 등을 이용하세요.

ForeignKey

한 모델에서 다른 모델을 이용할 때에 씁니다(보통 many-to-one 관계 모델에서 이용합니다).

영상에서도 여론조사(Poll) id 하나에 여러 개의 [후보-득표수]를 저장합니다.


댓글을 달아 주세요