본문으로 바로가기

장고를 활용한 웹사이트 만들기(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 하나에 여러 개의 [후보-득표수]를 저장합니다.

'Data Science > Python' 카테고리의 다른 글

데이터 분석가를 위한 개발 공부  (0) 2017.06.12
Jupyter에서 python3 같이 사용하기  (0) 2016.06.17
장고를 활용한 웹사이트 만들기(2)  (0) 2016.05.13
장고를 활용한 웹사이트 만들기(1)  (0) 2016.05.11
파이썬 입문  (0) 2016.05.03
DataFrame Merage  (0) 2016.01.28

댓글을 달아 주세요