Spring 의 Entity 와 DTO 에 해당하는 부분을 Django 에 맞게 바꿔보자!
@Data
@Entity
@Table(name = "extensions")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Extension {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "extension", nullable = false)
private String extension;
@Column(name = "type", nullable = false)
private String type;
@Column(name = "is_checked", nullable = false)
private boolean isChecked;
}
class Extension(models.Model):
id = models.AutoField(primary_key=True)
extension = models.CharField(null=False)
type = models.CharField(null=False)
is_Checked = models.BooleanField(null=False)
def __str__(self):
return self.extension
위의 Extension 엔티티를 Python 의 모델로 사용하기 위한 코드이다.
str 는 파이썬에서 제공하는 특별 메서드로 객체의 문자열 표현을 사용할 떄 쓴다고 한다.
(스프링에도 @ToString 이 존재한다. 혹은 toString 을 오버라이딩 하는 것으로 사용이 가능!)
이후 데이터베이스와 마이그레이션을 진행하고 이 모델을 바탕으로 ORM 이 가능해진다.
pip install mysqlclient
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'flow',
'USER': 'root',
'PASSWORD': '1234',
'HOST': 'localhost',
'PORT': '3306',
}
}
python manage.py makemigrations
python manage.py migrate
db 정보 마이그레이션 수행

위의 에러 발생 시 위의 적어놓은 마이그레이션 명령어들이 제대로 적용되었는지 확인하기
(또한 settings.py 의 INSTALLED_APP 에 생성한 app 이 있어야 인식할 수 있다.)

[Django] SerializerMethodField로 모델 필드 값을 변형해서 새로운 필드로 반환하기
Serializer 는 REST API 에서 Json 을 DB 인스턴스로 DB 인스턴스를 Json 으로 만들때 사용하게 된다!
(Spring의 DTO 랑 비슷하다고 볼 수 있다!)
@Getter
@Setter
@Builder
public class ExtensionRequest {
private String extension;
private String type;
private boolean checked;
}
@Getter
@Builder
public class ExtensionResponse {
private String extension;
private String type;
private boolean checked;
private String result;
}
from rest_framework import serializers
from .models import Extension
class ExtensionRequestSerializer(serializers.ModelSerializer):
class Meta:
model = Extension
fields = ['id', 'extension', 'type', 'is_checked']
class ExtensionResponseSerializer(serializers.ModelSerializer):
class Meta:
model = Extension
fields = ['id', 'extension', 'type', 'is_checked', 'result']
def get_result(self, obj):
if obj.checked:
return f"{obj.extension} 고정 확장자가 활성화 되었습니다."
else:
return f"{obj.extension} 고정 확장자가 비활성화 되었습니다."
Meta 에는 Serializer 에 사용할 모델과 메서드를 정의하고 get_ 함수를 통해서는
필드를 커스텀해서 사용할 수 있다.
따라서 위의 get_result 를 정의하는 것만으로도 serializer 를 생성해서 사용할 때 해당 메서드가
자동 호출되어 result 는 주어진 조건문에 맞는 문자열이 들어가게 된다.
(만약 Json 폼이 아닌 HTTP Form 으로 생성하고자 할 경우 Form 을 사용할 수 있다고 한다!)