728x90

데이터 베이스 만들기

 

--> python manage.py migrate 

 

보통은 데이터 베이스 관련 설정이 끝난 직후에 실행합니다. 데이터베이스를 만들었으니 앱에서 사용할 모델을 작성하겠습니다.

 

 

모델만들기

 

장고에서 모델은 데이터베이스의 구조도입니다. 데이터 베이스에 어떤 테이블을 만들고 어떤 컬럼을 갖게 할 것인지 결정합니다.

 

또 해당 컬럼의 제약 조건까지도 모델에서 결정합니다. 이 모델은 보통 modles.py 에 작성하고 클래스 형태입니다.

 

투표 앱을 위한 두 개의 모델을 만들어 보겠습니다.

 

polls/models.py 파일에 코드를 작성합니다.

 

 

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    
    
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

 

 

장고의 모델은 models.Model을 상속받아 만듭니다. 이 부모 클래스가 실제로 데이터베이스와 ORM을 이용해 동작하는 기능들을 가지고 있습니다.

 

각 클래스 변수들은 필드 값을 갖습니다. 해당 필드는 자료형과 같습니다. [CharField]는 문자열 타입이고 [DateTimeField]는 날짜와 시간 형태 입니다.

 

다른 설정을 하지않으면 각 변수명이 실제 데이터베이스와 장고가 사용하는 변수명입니다. 만약 사람이 읽기 쉬운 형태를 사용하고 싶다면

'data published' 처럼 인자로 전달하면 됩니다.

 

여기서 특이한 부분은 Foreign Key 입니다. 다른 모델과의 관계를 만들기 위해서 사용합니다.

 

Choice 모델이 ForeignKey로 Question 모델을 갖는다는 것은 Choice 모델이 Question 모델에 소속된다는 것을 의미합니다.

 

모델을 완성 했으니 settings.py 파일을 열고 INSTALLED_APP 변수 제일 윗줄에 polls앱을 추가합니다.

 

 

 

 

 

'polls.apps.PollsConfig' 는 polls 앱 폴더에 apps.py 파일에 있는 PollsConfig클래스를 의미합니다.

 

짧게 쓰고 싶다면 [polls]라고 앱 이름만 써도 됩니다.

 

--> python manage.py makemigrations polls

 

명령을 실행하면 앱의 변경사항을 추적해 데이터베이스에 적용할 내용을 만들어 냅니다. 그 결과는 polls/migrations/0001_initail.py 파일에 기록되어 있습니다.

 

 

 

이제 어떤 SQL 구문이 실행될지 확인해 봅시다.

 

--> python manage.py sqlmigrate polls 0001

 

명령을 입력하고 실행하면 여러줄의 SQL 구문이 나타납니다. 이것을 보고 어떤 SQL을 실행할지 또는 문제가 있는 쿼리는 아닐지 판단 할 수 있습니다. 하지만 장고를  사용하면 이런 쿼리문을 잘 모르더라도 웹 서비스를 구축할 수 있습니다.

 

이렇게 두 명령을 실행해도 아직은 데이터 베이스에 반영이 된 상태가 아닙니다. 변경사항을 데이터베이스에 반영하기 위한 명령을 입력 하겠습니다.

 

--> python manage.py mi

 

이렇게 두 명령을 실행하면 데이터베이스에 테이블을 생성하고 초기화 할 수 있습니다.

 

 

모델에 함수 추가하기

 

[Question] 모델과 [Choice] 모델에 [__str__] 메서드를 추가 합니다. 해당 메서드는 관리자 화면이나 쉘에서 객체를 출력할 때 나타날 내용을 결정합니다.

 

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

 

 

다른 메서드도 하나 추가해 보겠습니다. 다음 코드를 보고 [was_published_recently] 메서드를 추가하고 해당 메서드가 잘 작동하도록

datetime 과 timezone도 import 합니다.

 

from django.db import models
from django.utils import timezone

import datetime


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

 

 

모델을 작성한 후에 단순 메서드 변경은 migrate를 할 필요가 없습니다. 모델 작성을 끝냈으니 관리자 페이지에서 확인해 보겠습니다.

 

 

관리자 페이지 확인하기

 

관리자 페이지를 접근하기 위해서는 관리자 계쩡이 필요합니다. 다음 명령어를 이요해 관리자 계정을 만들어 봅시다.

 

--> python manage.py createsuperuser

 

관리자 계정을 생성하면 바로 서버를 실행합니다.

 

--> python manage.py runserver

 

서버를 동작시키고 127.0.0.1:8000/admin/을 주소창에 입력해 관리자 페이지에 접속합니다.

 

 

 

 

관리자 페이지에서 [Question] 모델을 관리하려면 등록을 해야합니다. admin.py 파일에 다음 코드를 입력합니다.

 

 

 

from django.contrib import admin
from .models import Question

admin.site.register(Question)

 

새로운 투표를 등록하기 위해 [Questions]를 클릭 합니다. 클릭하면 투표 목록으로 이동할 수 있습니다.

 

투표 목록에는 아무것도 없습니다. 아직 투표를 등록하지 않았기 때문입니다. 오른쪽 위에 있는 [ADD QUESTION] 버튼을 클릭해 등록 화면

으로 이동합니다.

 

 

SAVE 버튼을 눌러 저장합니다.

 

다음 글에선 투표를 추가하면 목록 화면에 나타납니다. 이 목록도 보기 좋게 변경해보는 것부터 시작하겠습니다.

 

 

728x90

'Python > python - django' 카테고리의 다른 글

웹 서버 시작하기  (0) 2020.12.04
django 시작하기  (0) 2020.12.04