일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Java
- 역학
- GPT-4's answer
- 고전역학
- android
- oracle
- jpa
- Database
- flet
- 웹 크롤링
- 시스템
- 유닉스
- spring integration
- 자바암호
- 데이터베이스
- 리눅스
- 자바네트워크
- write by GPT-4
- spring data jpa
- 코틀린
- JVM
- 인프라
- NIO
- 자바
- 파이썬
- chatGPT's answer
- kotlin
- write by chatGPT
- python
- 소프트웨어공학
- Today
- Total
기억을 지배하는 기록
[추가자료] 8.3 웹 프레임워크 - Django Model 본문
Django의 모델은 웹 애플리케이션의 데이터 구조를 정의하고 데이터베이스와의 상호작용을 처리하는 중요한 부분입니다. 모델은 Python 클래스로 표현되며, Django의 ORM(Object-Relational Mapping)을 통해 데이터베이스의 테이블과 매핑됩니다. 이를 통해 개발자는 복잡한 SQL 쿼리를 작성하지 않고도 데이터베이스를 효율적으로 관리할 수 있습니다.
기본 구조
모델은 django.db.models.Model
클래스를 상속받아 정의됩니다. 모델의 각 속성은 데이터베이스 테이블의 필드를 나타내며, Django에서 제공하는 필드 타입을 사용하여 선언합니다.
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
publish_date = models.DateField()
isbn_number = models.CharField(max_length=13)
page_count = models.IntegerField()
cover_image = models.ImageField(upload_to='covers/')
available = models.BooleanField(default=True)
필드 타입
모델에서 사용할 수 있는 다양한 필드 타입이 있습니다:
CharField
: 문자열 필드,max_length
파라미터가 필요합니다.IntegerField
,DecimalField
,FloatField
: 정수, 소수, 부동 소수점 숫자를 저장합니다.DateField
,DateTimeField
: 날짜와 시간 정보를 저장합니다.EmailField
: 이메일 주소를 검증하는 문자열 필드입니다.FileField
,ImageField
: 파일 또는 이미지를 저장할 때 사용됩니다.BooleanField
: True/False 값을 저장합니다.
관계 필드
복잡한 데이터베이스 구조를 지원하기 위해 Django는 관계 필드도 제공합니다:
ForeignKey
: 다대일 관계를 구현합니다.ManyToManyField
: 다대다 관계를 구현합니다.OneToOneField
: 일대일 관계를 구현합니다.
class Author(models.Model):
name = models.CharField(max_length=100)
bio = models.TextField()
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
publish_date = models.DateField()
모델 메서드
모델에 메서드를 추가하여 인스턴스의 동작을 사용자 정의할 수 있습니다. 예를 들어, 모델 인스턴스의 문자열 표현을 정의하는 __str__
메서드를 자주 사용합니다.
class Book(models.Model):
title = models.CharField(max_length=100)
def __str__(self):
return self.title
Django의 모델은 강력하면서도 유연한 데이터 관리를 지원하여 복잡한 데이터베이스 구조도 쉽게 다룰 수 있게 해줍니다. 이러한 모델 시스템은 Django 웹 애플리케이션의 데이터 핵심을 구성하며, 애플리케이션 로직과 밀접하게 연결되어 있습니다.
Meta 클래스
Django 모델의 Meta
클래스는 모델에 대한 다양한 메타데이터를 정의하는 데 사용됩니다. 이 메타 데이터는 모델의 동작 방식을 커스터마이징하고, 데이터베이스 수준에서의 동작, 관리자 인터페이스에서의 표현 등을 세밀하게 조정할 수 있게 도와줍니다. 여기에는 정렬 방법, 테이블 이름, 모델 권한, 추상 모델 설정 등이 포함됩니다.
db_table
- 모델에 대응하는 데이터베이스 테이블의 이름을 직접 지정합니다. 지정하지 않을 경우 Django는 자동으로
<app_label>_<model_name>
형식의 이름을 사용합니다.
class MyModel(models.Model):
class Meta:
db_table = 'my_custom_table'
ordering
- 데이터베이스에서 객체를 조회할 때의 기본 정렬 순서를 지정합니다. 이 옵션은 모델의 리스트를 반환할 때 적용되며, 문자열 리스트로 필드명을 지정하며, 필드명 앞에
-
를 붙이면 내림차순 정렬을 의미합니다.
class MyModel(models.Model):
class Meta:
ordering = ['name', '-date_created']
verbose_name
과 verbose_name_plural
- 모델의 단수형과 복수형 이름을 지정합니다. 이 이름들은 Django의 관리자 인터페이스에서 사용됩니다.
class MyModel(models.Model):
class Meta:
verbose_name = "Profile"
verbose_name_plural = "Profiles"
permissions
- 사용자 정의 권한을 모델에 추가합니다. 이것은 특히 사용자가 관리자 인터페이스를 통해 특정 작업을 수행할 수 있도록 할 때 유용합니다.
class MyModel(models.Model):
class Meta:
permissions = (
("view_history", "Can view history"),
("close_project", "Can close project"),
)
unique_together
과 index_together
unique_together
는 두 개 이상의 필드에 대해 유니크 제약 조건을 설정합니다.index_together
는 두 개 이상의 필드에 대한 인덱스를 생성합니다. 이는 데이터베이스의 조회 성능을 향상시킬 수 있습니다.
class MyModel(models.Model):
class Meta:
unique_together = (('field1', 'field2'),)
index_together = (('field1', 'field2'),)
abstract
- 추상 기본 클래스를 지정합니다. 이 메타 옵션을
True
로 설정하면, 해당 모델은 데이터베이스 테이블을 생성하지 않고, 다른 모델들이 상속받아 사용할 수 있는 "베이스 모델"로만 사용됩니다.
class MyBaseModel(models.Model):
class Meta:
abstract = True
이러한 Meta
옵션들은 모델을 더 효율적으로 관리하고, 애플리케이션의 요구사항에 맞게 데이터베이스 테이블을 최적화하며, 사용자 경험을 개선하는 데 중요한 역할을 합니다. Django에서 모델의 메타 데이터를 적절히 활용하는 것은 강력하고 유연한 애플리케이션 설계의 핵심 요소 중 하나입니다.
마이그레이션 관리
모델을 변경한 후에는 마이그레이션을 통해 데이터베이스 스키마를 업데이트해야 합니다.
- 마이그레이션 생성: 모델 변경 후
python manage.py makemigrations
를 실행하여 마이그레이션 파일을 생성합니다. - 마이그레이션 적용:
python manage.py migrate
를 실행하여 변경사항을 데이터베이스에 적용합니다.
Django의 모델은 데이터베이스 스키마의 추상화로서 Python 클래스를 사용해 정의됩니다. 이 클래스들은 Django의 ORM을 통해 데이터베이스 테이블로 변환됩니다. 모델을 구성하는 기본 구조와 문법에 대해 자세히 알아보겠습니다.
데이터베이스 설정
Django에서는 다양한 데이터베이스 시스템을 지원하며, 각 데이터베이스에 모델을 적용하는 방법은 대체로 비슷합니다. 여기서는 Django에서 가장 널리 사용되는 데이터베이스—SQLite, PostgreSQL, MySQL, Oracle—에 모델을 적용하는 기본적인 설정과 절차를 알아보겠습니다.
Django 프로젝트의 settings.py
파일에서 DATABASES
설정을 통해 데이터베이스를 설정할 수 있습니다. 기본적으로 Django는 SQLite를 사용합니다.
SQLite
SQLite는 설정이 가장 간단하며, 개발 초기 단계에서 많이 사용됩니다. 기본 설정은 다음과 같습니다:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
PostgreSQL
PostgreSQL은 생산 환경에서 많이 사용되는 강력한 오픈 소스 데이터베이스입니다. Django에서 사용하기 위해서는 psycopg2
패키지가 필요합니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
MySQL
MySQL을 사용하기 위해서는 mysqlclient
라이브러리를 설치해야 합니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '3306',
}
}
Oracle
Oracle 데이터베이스를 사용하려면 cx_Oracle
라이브러리가 필요합니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'xe',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '',
'PORT': '',
}
}
2. 마이그레이션 수행
모델을 데이터베이스에 적용하기 위해서는 마이그레이션을 생성하고 적용해야 합니다.
# 마이그레이션 파일 생성
python manage.py makemigrations
# 데이터베이스에 마이그레이션 적용
python manage.py migrate
주의사항
각 데이터베이스에 맞는 특정 설정(문자 집합, 타임존, 연결 설정 등)이 필요할 수 있습니다. 또한, 성능 최적화와 관련된 추가 설정을 고려할 수도 있습니다.
'Python for Beginners' 카테고리의 다른 글
Pandas 텍스트 및 이진 데이터 읽기 (0) | 2024.07.16 |
---|---|
Jupyter notebook 외부에서 접속하기 (0) | 2024.07.16 |
[추가자료] 8.3 웹 프레임워크 - Django Templates (1) | 2024.06.19 |
[추가자료] 8.3 웹 프레임워크 - Django View (0) | 2024.06.19 |
[추가자료] 8.3 웹 프레임워크 - Django 소개 (0) | 2024.06.19 |