App 구현 - MTV의 M (models.py)

Hansu Kim·2021년 9월 15일
0

Django

목록 보기
3/10

App 구현 - models.py

  • App은 Model(models.py) -> URLconf -> Template -> View 순서로 코딩하는게 정석

장고 프로젝트 구현 순서
1. 프로젝트 뼈대 만들기
2. Model(모델) 코딩하기
테이블 관련 사항을 개발(models.py, admin.py파일)
3. URLconf 코딩하기
URL 및 View 매핑 관계를 정의(urls.py 파일)
4. template(템플릿) 코딩하기
화면 UI 개발(templates/ 디렉토리 하위의 .html 파일)
5. View(뷰) 코딩하기
어플리케이션 로직 개발(views.py 파일)

model 생성 (models.py)

from django.db import models
from django.db.models.query_utils import RegisterLookupMixin

class Fcuser(models.Model):
    # verbose_name: 관리자 페이지에서의 출력 string
    username = models.CharField(max_length=64,
                                verbose_name='사용자명')
    password = models.CharField(max_length=64,
                                verbose_name="비밀번호")
    registered_dttm = models.DateTimeField(auto_now_add=True,
                                           verbose_name='등록시간')

# 클래스 안의 클래스로 프레임워크에서 테이블명 지정 등 내가 원하는 동작을 수행
    class Meta:
        db_table = 'fastcampus_fcuser'
  • django의 모델은 항상 models.Model을 상속해야 한다.
  • 클래스 내 클래스를 통해 DB에 대해서 지정할 수 있다.

models.py를 반영하여 DB 생성

  • App을 장고 프로젝트에 참조시키고, App 내 models.py가 구현된 상태에서 아래 명령어 수행시 모델이 자동으로 생성됨.
$ python manage.py makemigrations
  • makemigrations 수행시
    • App.migrations.__pycache__.0001_initial 경로에 모델이 사용하는 테이블을 자동으로 생성
  • migrate 수행시
    • ProjectFolder.ProjectApp.settings의 DATABASES 항목을 참고하여 DB 생성
      • ENGINE을 사용할 것이고, NAME의 위치에 SQL문이 작성된 파일을 생성함
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
  • 생성된 DB 확인
$ sqlite3 db.sqlite3
SQLite version 3.32.3 2020-06-18 14:16:19
Enter ".help" for usage hints.
sqlite> .tables
auth_group                  django_admin_log          
auth_group_permissions      django_content_type       
auth_permission             django_migrations         
auth_user                   django_session            
auth_user_groups            fastcampus_fcuser         
auth_user_user_permissions
sqlite> .schema fastcampus_fcuser
CREATE TABLE IF NOT EXISTS "fastcampus_fcuser" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "username" varchar(64) NOT NULL, "password" varchar(64) NOT NULL, "registered_dttm" datetime NOT NULL);
sqlite> 
  • 추후 필드 수정시 makemigration & migrate 수행이 필요

0개의 댓글