본문 바로가기

학습/[The-Origin][SW][Backend] Main Pag

[The Origin][VSCODE][Django] Model 이해하기

반응형

Django Model

개념

  - 데이터를 관리하는 역할

  - 데이터베이스에 저장할 테이블 정의

  - 모델에 작성된 코드를 기준으로 데이터베이스 생성

특징

  - 장고 내장 ORM

  - 하나의 장고 프로젝트에 하나의 DB 사용

  - Python Class & Database Table Mapping

     Mode : DB Table과 Mapping

     Model Instance : DB Table의 1 Row

Model field (모델 필드)

https://docs.djangoproject.com/en/4.0/ref/models/fields/#model-field-types

 

Model field reference | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

주요 Model field (모델 필드)

  - CharField (str)

      작거나 큰 문자열을 위한 문자열 필드

      속성 : max_length,

  - TextField (str)

      긴 텍스트 필드

  - BooleanField (bool)

      참/거짓 필드

  - DateTimeField (datetime)

      datetime.datetime인스턴스로 표시되는 날짜 및 시간 필드

      속성 : auto_now, auto_now_add

  - IntegerField (int)

      정수 필드(-2147483648to 값은 2147483647)

  - FloatField (float)

      부동 소수점 숫자 필드

Field Option (필드 속성)

https://docs.djangoproject.com/en/4.0/ref/models/fields/#field-options

 

Model field reference | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

주요 Field Option (필드 속성)

  - [모든 field] null  (True/False)

      None을 허용 여부

  - [모든 field] blank  (True/False)

      공백을 허용 여부

  - [모든 field] choices  (list(tubple()))

      선택적인 값 입력

  - [모든 field] default  (field의 자료형 값)

      기본적인 값을 지정

  - [모든 field] unique  (True/False)

      해당 모델 간의 고유한 값의 여부

  - [모든 field] verbose_name  (str)

      사용자에게 노출될 문구

  - [Charfield] max_length  (int)

      최대 글자 수의 제한


게시글 만들기를 통한 이해

게시글 DB 만들기

  - DB를 만들기 위해서 Model의 데이터형태와 이름을 지정을 한다.

from django.db import models

class post(models.Model):
    image = models.ImageField(verbose_name='이미지')
    content = models.TextField('내용')
    created_at = models.DateTimeField('작성일')
    view_count = models.IntegerField('조회수')

  - models.py 파일에 내용을 추가하여 작성을 한다

Makemigrations

  - migration을 만들기를 시도한다

SystemCheckError: System check identified some issues:

ERRORS:
m_test.post.image: (fields.E210) Cannot use ImageField because Pillow is not installed.
        HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "python -m pip install Pillow".

  - Error에 대한 대책으로 어떻게 해야할지 내용이 작성되어있다

    설명에 따라서 Pillow를 설치를 한다

Pillow 설치

  - command를 통해서 설치가 바로 가능하다

     설치가 안 될 경우 따로 설치를 해줘야한다

     전체에 설치를 하고 가상환경에 적용되는 별도의 방법 (거의 일어나지 않을 가능성)

create 완료 확인

  - 만들어둔 결과물에 대한 확인을 한다

     파일명에 따라 내용들이 잘 작성 되어있는지 확인한다

migrate

  - model을 통한 DB를 만들기 위한 기능 실행


user 만들기 (Admin)

superuser 생성

  - 접속을 하기 위해서는 계정이 있어서 사용자를 인식해주어야한다.

  비밀번호는 쳐도 보이지 않지만 입력되고 있다.

  이 패스워드는 관리자도 볼 수 없다. (암호화 처리)


확장을 통해서 DB 간단히 확인

SQLite 확장프로그램 설치

  - query를 통해서 관계형 데이터를 확인할 수 있는 확장 프로그램이다.

     다른 프로그램도 있지만 강의를 따라하기 위해서 사용한 프로그램

Database 열기

  - 여는 방법은 간단하다.

     확장프로그램을 통해서 이미 설치가 되어 있기 때문에 열기만 하면 된다

  -  확장프로그램을 통한 Database 보기

데이터 결과값 보기 (예시)

  - 그냥 열어보면 실제로 맞는지 확인이 안되기 때문에 결과값에 대해서 확인하는 것이 좋다


댓글 만들기를 통한 이해

댓글 model 추가

  - 댓글 기능을 위한 Data를 넣을 공간 model 생성

from csv import writer
from django.db import models

# to=user 사용자와 연결하기 위한 import
from django.contrib.auth import get_user_model

User = get_user_model()

class post(models.Model):
    image = models.ImageField(verbose_name='이미지', null=True, blank=True)
    content = models.TextField('내용')
    created_at = models.DateTimeField('작성일', auto_now_add=True)
    view_count = models.IntegerField('조회수', default=0)
    writer = models.ForeignKey(to=User, on_delete=models.CASCADE, null=True, blank=True)

class comment(models.Model):
    content = models.TextField(verbose_name='내용')
    create_at = models. DateTimeField(verbose_name='작성일')
    post = models.ForeignKey(to='post', on_delete=models.CASCADE)
    writer = models.ForeignKey(to=User, on_delete=models.CASCADE, null=True, blank=True)

추가된 테이블 확인

  - 만들어진 결과물이 추가되어있는지 확인한다


Shell을 이용한 데이터 생성

Shell 실행

  - 명령어 창을 통해서 실행

  - shell command를 통한 데이터 추가

# App(m_test)의 Model.py 파일의 'post' class import
>>> from m_test.models import post
#
# 제대로 되었는지 import한 post 확인
>>> post
<class 'm_test.models.post'>
#
# models의 post
>>> post.objects.create(content='추가할 데이터 입력')  
#
# 추가된 obect 확인
>>> post.objects.all()
<QuerySet [<post: post object (1)>, <post: post object (2)>, <post: post object (3)>, <post: post object (4)>, <post: post object (5)>]>
#
# Shell 끄기
>>> exit()

SQLite로 Data 확인

  - 다르게 추가하는 방법 확인 결과


 

반응형