본문 바로가기
Web/django

(Django) first project 2 - Model

by 스퀴시 2020. 8. 11.
728x90
SMALL

객체 (Object)

1. OOP(Object oriented programming)

모델을 만들어 그 모델이 어떤 역할을 가지고 어떻게 행동해야 하는지 정의하여 서로 알아서 상호작용할 수 있도록 하는 것

OBJECT(대상) -> Class(분류 기준)
                  -> instance(예시)
각 instance는 각기 다른 (변수) 지만 같은 함수를 가짐 그리고 다른 결과

class 안에는 변수, 함수(메소드)

 

2. 객체

존재하는 것을 속성과 행동으로 나타내는 것

속성은 객체 속성, 행위는 method 로 구현 된다.

ex) post

Post  -> 객체
-------------
속성
title
content
author
created_date
modified_date

행위 (method)
create  
destory 
update
show
publish
------------------------------------------

 

Django Model

Django 안의 model은 객체의 특별한 종류 -> model 저장 시 DB에 저장되는 것

이 포스팅에서는 기본인 sqlite3가 아닌 mysql연동하여 사용할 것

 

 

어플리케이션 만들기

1. startapp (애플리케이션 생성)

(myvenv) C:\Users\유상정\djangogirls>python manage.py startapp blog

-> blog dir 생성되고 그 안에 여러 파일이 들어있는 것 알 수 있음

startapp 후 dir 구조

2. mysite/settings.py 파일 수정 

-> 애플리케이션 생성 후, Django에게 사용해야 한다고 알리는 역할

-> file안의 INSTALLED_APPS 를 찾아서, 'blog' 추가

INSTALLED_APPS

 

Blog post model 만들기

  • 모든 Model 객체는 blog/models.py 파일에 선언하여 model을 만든다.
from django.db import models
from django.conf import settings
from django.utils import timezone


class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    tilte = models.CharField(max_length=200)
    content = models.TextField()
    created_date = models.DateTimeField(default=timezone.now) 
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()
    
    def __str__(self):
        return self.title

1. Class 설명

Class Post(models.Model) : -> Model 정의하는 코드 ( Model은 객체)

 - class는 특별한 키워드로 객체를 정의하는 것

 - Post는 model 이름 (Class이름의 첫 글자는 대문자! and 특수문자와 공백 제외)

 - models 는 Post가 Django model임을 의미 -> 이 코드 덕에 Django는 Post가 DB에 저장되어야 함을 알게 된다.

 

2. 속성

 -> author, title, content, created_date, published_date

 -> 속성을 정의하기 위해, field 마다 어떤 종류의 Data type을 가지는지를 정의해야함

 -> Data type : text, number, Date, User 같은 다른 객체 참조가 있다.

 - models.CharField() : 글자 수가 제한된 text를 위한 속성 (제목, 소제목, 댓글 등)
 - models.TextField() :  글자 수에 제한 없는 긴 text 를 위한 속성 (Content 등)
 - models.DateTimeFild : 날짜와 시간을 의미
 - models.ForeignKey : other model에 대한 link를 의미 (참조 가능)

3. method

 - def 를 통해서 publish와 __str__을 정의했다. 각각의 method를 호출함으로서 그 기능을 행한다.

 

DB에 Model을 위한 Table만들기

1. makemigration (migration 파일 생성)

(myvenv) C:\Users\유상정\djangogirls>python manage.py makemigrations blog

Migrations for 'blog':
  blog\migrations\0001_initial.py
    - Create model Post

 

2. migrate (DB에 migration 파일 적용)

(myvenv) C:\Users\유상정\djangogirls>python manage.py migrate blog
Operations to perform:
  Apply all migrations: blog
Running migrations:
  Applying blog.0001_initial... OK

-> Post Model이 DB에 적용되었다. 

-> 다음은 다음장에서 설명할 것임

 

(참고) migration 파일을 제거해야 하는 경우 (wikidocs)

https://wikidocs.net/9926

LIST

'Web > django' 카테고리의 다른 글

(Django)first project3 - Admin  (0) 2020.08.12
Django MySQL 연동  (0) 2020.08.11
django 개념  (0) 2020.08.10
(django) first project 1 - 생성 및 설정  (0) 2020.08.10
(Windows) django 설치  (0) 2020.08.10