Django : Model

김재훈·2024년 3월 14일

Django

목록 보기
4/15
  • Model을 통한 DB(데이터베이스) 관리
  • DB의 테이블을 정의하고 데이터를 조작할 수 있는 기능들을 제공
    • 테이블 구조를 설계하는 '청사진(blueprint)'

model 클래스 작성

  • 작성한 모델 클래스는 최종적으로 DB에 다음과 같은 테이블 구조를 만듦

  • django.db.models 모듈의 Model이라는 부모 클래스를 상속받음
  • Model은 model에 관련된 모든 코드가 이미 작성되어 있는 클래스
  1. 클래스 변수명
    • 테이블의 각 "필드(속성, 열) 이름"
  2. model Field 클래스
  3. model Field 클래스의 키워드 인자(필드 옵션)

제약 조건

  • 데이터가 올바르게 저장되고 관리되도록 하기 위한 규칙
    • ex) 숫자만 저장되도록, 문자가 100자 까지만 저장되도록 하는 등

Migrations

  • model 클래스의 변경사항(필드 생성, 수정 삭제 등)을 DB에 최종 반영하는 방법
  • Migrations 핵심 명령어 2가지
    • $ python manage.py makemigrations
      • model class를 기반으로 최종 설계도(migration) 작성
    • $ python manage.py migrate
      • 최종 설계도를 DB에 전달하여 반영
      • 최종 테이블 이름은 "앱이름_모델클래스이름"으로 자동으로 변경하여 저장됨
      • ex) articles_articles

Migrations 추가

  • 이미 생성된 테이블에 필드를 추가하려면
  • 추가 모델 필드 작성
  • 이미 기존 테이블이 존재하기 때문에 필드를 추가할 때 필드의 기본 값 설정이 필요
    • 1번은 현재 대화를 유지하면서 직접 기본 값을 입력하는 방법
    • 2번은 현재 대화에서 나간 후 modles.py에 기본 값 관련 설정을 하는 방법
  • model class에 변경 사항이 생기면 반드시
    1. model class 변경
    2. makemigrations
      • 기존에 있던 row에 넣어줄 default 값 설정
    3. migrate

Model Field

  • DB 테이블의 필드(열)을 정의하며, 해당 필드에 저장되는 데이터 타입과 제약조건을 정의

CharField()

  • 길이의 제한이 있는 문자열을 넣을 때 사용 (필드의 최대 길이를 결정하는 max_length는 필수 인자)

TextField()

  • 글자의 수가 많을 때 사용

DateTimeField()

  • 날짜와 시간을 넣을 때 사용
  • auto_now
    • 데이터가 저장될 때마다 자동으로 현재 날짜시간을 저장
  • auto_now_add
    • 데이터가 처음 생성될 때만 자동으로 현재 날짜시간을 저장

Admin site

Automatic admin interface

  • Django는 추가 설치 및 설정 없이 자동으로 관리자 인터페이스를 제공
    • 데이터 확인 및 테스트 등을 진행하는데 매우 유용
  1. admin 계정 생성
  • email은 선택사항이기 때문에 입력하지 않고 진행 가능
  • 비밀번호 입력 시 보안상 터미널에 출력되지 않으니 무시하고 입력 이어가기
    $ python manage.py createsuperuser
  1. DB에 생성된 admin 계정 확인
  2. admin에 모델 클래스 등록
    • admin.py에 작성한 모델 클래스를 등록해야만 admin site에서 확인 가능
    • from .models import Modelclass
    • admin.site.register(Modelclass)
  3. admin site 로그인 후 등록된 모델 클래스 확인
  4. 데이터 생성, 수정, 삭제 테스트
  5. 테이블 확인

참고

데이터베이스 초기화

  1. migration 파일 삭제
  2. db.sqlite3 파일 삭제
    • init.py 파일 삭제 금지
    • migrations 폴더 삭제 금지

Migrations 기타 명령어

  • $ python manage.py showmigrations
    • migrations 파일들이 migrate 됐는지 안됐는지 여부를 확인하는 명령어
    • [X] 표시가 있으면 migrate가 완료되었음을 의미
  • $ python manage.py sqlmigrate articles 0001
    • 해당 migrations 파일이 SQL 언어(DB에서 사용하는 언어)로 어떻게 번역되어 DB에 전달되는지 확인하는 명령어

첫 migrate 시 출력 내용이 많은 이유

  • Django 프로젝트가 동작하기 위해 미리 작성되어 있는 기본 내장 app들에 대한 migration 파이들이 함께 migrate되기 때문
    • INSTALLED_APPS 설정에 포함되어 있음
app내용
auth사용자 인증과 권한 관리를 위한 앱으로, 사용자, 그룹, 권한 관련 모델을 포함
admin관리자 사이트를 구축하기 위한 앱으로, 관리자 페이지의 레이아웃과 동작을 제공
contenttypes켄턴츠 유형(content type)을 관리하는 앱으로, 장고 모델에 대한 유형을 추적
sessions세션 관리를 위한 앱으로, 사용자 세션 데이터를 저장
messages메시지 프레임워크를 위한 앱으로, 임시 메시지를 유지하고 전달
staticfiles정적 파일 관리를 위한 앱으로, 개발 및 배포시 정적 파일을 처리

SQLite

  • 데이터베이스 관리 시스템
  • Django의 기본 데이터베이스로 사용
    • 파일로 존재하며 가볍고 호환성이 좋음

SQL (Structured Query Language)

  • 데이터 조작어 (Data Manipulation Language)
  • 데이터 정의어 (Data Definition Language)
  • 데이터 제어어 (Data Control Language)

CRUD

  • 소프트웨어가 가지는 기본적인 데이터 처리 기능
  • Create (저장)
  • Read (조회)
  • Update (갱신)
  • Delete (삭제)

0개의 댓글