본문 바로가기

Python Jango

DRF의 Model, Serializer

Model이란??

 

쉽게 말해 모델은 데이터 창고라고 생각하면 된다.

 

이렇게 과자에는 여러가지 정보가 있다.

 

당연히 models.py에 작성해야 한다.

 

형태는 밑에와 같다

class 자신이 원하는 이름(models.Model):
	정보1 = models.뭐시기()
	정보2 = models.뭐시기()
    
name = models.CharField()

 

만약에 정보1에 이름을 넣고 싶다?

저렇게 CharField()처럼  필드종류에 맞게 써주는 것이 포인트이다.

변수에 맞게 무엇을 적어야 할지 모른다면 아래 링크를 들어가서 보도록 하자.

 

우리는 이제 과자 창고와, 과자 정보를 만들어보자.

여거시

과자 창고 -> class

과자 정보 -> 이름, 칼로리, 유통기한이 되는 것이다.

 

class 과자(models.Model):
	이름 = models.CharField()
	칼로리 = models.IntergerField()
	유통기한 = models.DataTimeField()

 

이렇게 Model은 데이터베이스와 연결시켜주는 중간 다리 역할을 해준다. 

또한, Class에 적었던 내용을 데이터베이스에 맵핑해주는 역할을 한다.

 

Class -> 데이터 베이스 테이블 이름 

각 변수 -> 데이터베이스의 속성 (열)

각 변수들의 집합 -> 데이터베이스의 레코드(행)

 

Model 구조

 

데이터 베이스에는 무조건 각 데이터를 식별하는 방법이 존재해야 한다.

이것을 Primary Key(기본키)라고 한다.

 

만약 초코파이는 오리온,롯데, 크라운에서 판매를 하는데

"난 과자 이름을 식별하는 방법으로 하겠어" 하면 이름이 중복이 되기 때문에 식별이 안된다.

그래서 보통은 id 값을 넣어줍니다. (알아서 생성해줌)

 

Model 설계법

 

그럼 Model를 어떻게 설계하는 것이 좋을 까?

우선 

1. 무엇을 만들어야 하는지 생각한다 -> 요구사항 분석

2. 어떤 정보가 들어가야 하는지 생각한다 -> 데이터 셋 확립

3. 각 정보들이 숫자, 날짜, 문자 등등 중에 무엇을 해야하는지 생각한다 -> 자료형 파악

4. 자료를 찾아가며 Model을 작성한다 -> 코드화

 

ex)

1. 난 음료수라는 것을 만들어야지!

2. 음료수에는 음료수 이름, 칼로리, 용량 등이 있으면 좋겠는걸?

3. 음료수 이름은 문자열, 용량은 숫자로 만들면 되겠다.

4. 코딩작업!!

 

이런식으로 해주면 된다. 

 

 

자 그럼 이  Model 왜 만드는 건지 알아야한다.

 

나중에 프로젝트를 하게되면 제일 먼저 하게되는 것이 데이터베이스 구조 짜기이다.

이는 정말 기초적이고 중요한 작업 중 하나이며 번거로운건 사실이다.

서버는 우리가 누군지 신경 쓰지도 않고 저장도 안한다.

이걸 Stateless(무상태성)이라고 하며  내용을 저장하지 않기에 우리가 직접 model을 만들어 차곡차곡 저장해줘야 한다.

 

우리가 나중에 만든 모델을 통하여

DB 생성, 삭제, 수정, 필터링을 진행하게 된다.

이것은 멋진말로 ORM(Object Relational Mapping)이라고 한다.

 

내가 예전 프로젝트를 진행했을 때는

SELECT * FROM users WHERE email="tese@test.com"

 

이런식으로 해줘야 됐는데 ORM을 쓰면 안해줘도 된다니 세상 편하다.

 

ORM 예시

모델이름.objects.filter(조건)

Student.objects.filter(조건..)
#조건에 맞는 것들 가져오기
Student.objects.Create(열=값, 열=값)
#조건에 맞는 것들 가져오기
Student.object.filter(조건..)..update(열=값)
#조건에 맞는 것들을 가져오고 업데이트하기

등등 겁나 많다...

 

 

Serializer는 뭐지?

 

다음은 Serializer에 대해 알아보겠다.

얘는 멋진말로 직렬화라고 한다.

Model -> Json으로 바꾸는 것을 직렬화라고 한다.

 

 

그럼  JSON이 뭘까??

JSON은(JavaScript Object Notaion)은 객체(Class) 데이터를 문자로 보내는 걸 말한다.

그냥 쉽게 말해서 프론테엔드 쪽에서 알아먹는 형식으로 바꿔보내는 것이다.

 

그럼 Serializer 만들어보자. 

 

현재 자신의 app폴더에서 serializers.py를 만들어주고 작성해야 한다. 

형태만 잡아논 것이고, 클래스가 가지고 있는 메소드를 통해서 JSON(직렬화) 작업을 알아서 해줌.

 

from .models import 내가 만든 모델이름 # models라는 파일에서 '내가 만든 모델이름'을 가져온다.
from rest_framework import serializers # 이건 프레임워크 개발자가 이렇게 스라고 정해졌다 

class 모델이름Serializer(serializers.ModelSerializer) # 모델이름Serializer라고 쓰는 것이 관례이다.

#밑에도 프레임워크 개발자가 이렇게 쓰라함.
 class Meta:
 	model = 내가 만든 모델이름 # 여기에 불러온 '내가 만든 모델이름'을 넣어준다.
	fields = "__all__" #이거는 json에 표시하는 모델 항목들을 모두 넣겠다는 의미이다.

 

참고사이트: https://www.django-rest-framework.org/api-guide/serializers/

 

Serializers - Django REST framework

 

www.django-rest-framework.org

 

최종적으로 진행도는 아래와 같다.

 

'Python Jango' 카테고리의 다른 글

Sever, Django, DRF  (0) 2024.05.17