[프로젝트 2일차] Django ORM에 대한 이해

미음제

·

2020. 11. 6. 00:27

 

프로젝트 진행 2일 차, 아직까지 만들어낸 결과물이라고 말할 것이 그다지 없다.

1일 차에 사용할 애플리캐이션을
생성하는 것까지 완료했고,

2일 차인 오늘부터
admin패널과, user패널을 손보기 시작했다.

 

 

 

 

오늘 프로젝트를 진행하며 새롭게 배운 사실과, 다시 복습한 개념들이다.

 

 

Config

config 폴더는 마스터

나머지 폴더는 애플리케이션

애플리케이션은 function의 그룹


 

장고는 우리가 작성한 코드를 사용하는 것이다.

우리가 장고를 사용하는 게 아니라,


장고 ORM

ORM은 (Object relational mapping)

장고는 ORM이라는 것을 탑재하였고,

사용자의 파이썬 코드를 SQL문으로 바꿔서

데이터베이스가 알아들을 수 있게 만들어준다

 

참으로 편리한 기능이다. 장고를 처음 접해보지만

왜 장고 장고하는지 알거같은?

 

 

 

예를 들어,

파이썬 파일에 작성한 필드들을 장고가 알아서

데이터베이스에 테이블로 만들어 준다는 것이다. 

 

가령 user 애플리케이션에서

user가 가질 수 있는 데이터베이스 테이블을

성별, 프로필 이미지, 소개란, 언어, 생일 등을 추가하고자 한다면.

models.py에 필요한 필드 값을 입력해준다.

 

from django.contrib.auth.models import AbstractUser
from django.db import models

#Create your models here.
class User(AbstractUser):

	""" Custom User Model """
    GENDER_M = "male"
    GENDER_F = "female"
    
    GENDER_CHOICE = (
    	(GENDER_M, "Male"),
        (GENDER_F, "Female"),
    )
    
    LAN_ENG = "en"
    LAN_KOR = "kr"
    
    LAN_CHOICES = (
    	(LAN_ENG = "English"),
        (LAN_ENG = "Koreaan"),
    )

우선 선택할 수 있는 값들은 상수로 선언을 해주고

각각에 필드에서 선택할 값을 튜플(tuple)에 넣어주면 된다.

 

 

그리고 이하 코드는 아래처럼

	profile_img = models.ImageField(blank=True)
	gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True)
	bio = models.TextField(blank=True)
	birthdate = models.DateField(blank=True, null=True)
	lan = models.CharField(choices=LAN_CHOICES, max_length=2, blank=True)

각 필드(필요한 필드, 사용할 필드)를 선언해주면 된다.

 

 

img필드는 img를 다루고 text필드는 text를 다루는 것이다.

좋은 점은 각 필드는 유효성을 장고가 알아서 검사해주는 것이다.

 

예를 들어, 위에 입력한 생일은 Data필드로

날짜 값만이 입력될 수 있다.

 

 생일 입력란에 날짜가 아닌, 다른 값을 입력하면

장고가 알아서 제대로 된 입력 값이 아니라고 걸러주는 것이다.

 

 

이런 코드가 작성되는 것이 models.py이고

models.py는 필드들(text, img, char, date, 등)로 구성되어 있고,

각 필드는 유효성 검사를 할 수 있고,

models.py에 작성한 것은 모두 장고가 알아서 데이터베이스 테이블로 만들어준다.

 

 

즉, ORM을 통해서 sql을 따로 작성하지 않아도 되고,

sql을 새롭게 배우지 않아도 된다는 것이다.

반응형