달나라 노트

Python django project 1 - 게시판 만들기 ch.4 : user app의 model 구성 본문

Python django/Python django project 1

Python django project 1 - 게시판 만들기 ch.4 : user app의 model 구성

CosmosProject 2020. 12. 13. 00:41
728x90
반응형

 

 

이번 챕터에선 user app의 model을 구성해 볼 것입니다.

 

model을 만들기 위해선 당연히 user 앱에 존재하는 models.py 파일에 코드를 작성하여야합니다.

 

django의 model은 마치 엑셀 파일처럼 되어있습니다.

표(table)처럼 되어있다는 뜻이죠.

 

컬럼이 존재하며 각 컬럼에 해당하는 데이터가 입력되면 새로운 row가 추가되어 새로운 데이터가 추가되는 형식입니다.

 

따라서 model에는 어떤 model에 어떤 컬럼이 있는지, 각 컬럼들에 들어갈 데이터는 뭔지 등에 대한 정보를 담게됩니다.

 

pro/user/models.py 파일을 열어 아래처럼 코드를 작성해봅시다.

 

 

from django.db import models

# Create your models here.

class ModelUser(models.Model):
    username = models.CharField(max_length=32, verbose_name='username')
    password = models.CharField(max_length=32, verbose_name='password')
    registered_dttm = models.DateTimeField(auto_now_add=True, verbose_name='registered_dttm')

    class Meta:
        db_table = 'user'
        verbose_name = 'Model_user'
        verbose_name_plural = 'Model_user'

    def __str__(self):
        return self.username

 

이제 위 코드의 의미가 뭔지 살펴봅시다.

 

 

 

 

from django.db import models

# Create your models here.

class ModelUser(models.Model):

일단 model을 생성하기 위해선 class를 생성해야 합니다.

 

따라서 저는 ModelUser라는 이름의 class를 생성하였고, models.Model이라는 class를 상속받고 있습니다.

 

 

 

 

    username = models.CharField(max_length=32, verbose_name='username')
    password = models.CharField(max_length=32, verbose_name='password')
    registered_dttm = models.DateTimeField(auto_now_add=True, verbose_name='registered_dttm')

위에서 django의 model은 여러 컬럼이 존재한다고 했죠?

이것이 바로 ModelUser라는 model에 존재하게 될 column 정보들을 표시해준 것입니다.

 

일단 우리는 유저 관련 내용을 담은 model을 만들 것이기 때문에 user와 관련되어 필요한 내용은 유저의 이름, 비밀번호 그리고 해당 유저가 등록된 시간이 필요합니다.

 

따라서 username, password, registered_dttm이라는 세 가지의 컬럼을 생성하였습니다.

 

models.CharField = 해당 컬럼이 문자(Character)가 들어가는 컬럼이라는 뜻입니다.

models.DateTimeField =해당 컬럼이 날짜시간(Datetime)이 들어가는 컬럼이라는 뜻입니다.

 

그리고 각각의 인자들을 살펴보면

max_length는 해당 컬럼에 들어갈 데이터의 최대 길이를 의미합니다.

max_length=32라는건 32글자까지 들어간다는 의미입니다.

 

verbose_name은 해당 컬럼의 이름을 어떻게 표시해줄지를 적는 곳입니다.

저는 세 컬럼 모두 그냥 컬럼이름과 완전히 동일하게 적었습니다.

 

auto_now_add=True는 현재 시스템 시간을 자동으로 입력하라는 뜻입니다.

예를들어 어떤 새로운 유저가 회원가입을 하여 ModelUser에 새로운 username과 password가 추가되었을 때 registered_dttm이라는 컬럼에는 model에 데이터가 추가된 시점의 날짜와 시간이 자동으로 입력됩니다.

 

 

 

 

    class Meta:
        db_table = 'user'
        verbose_name = 'Model_user'
        verbose_name_plural = 'Model_user'

    def __str__(self):
        return self.username

위 내용을 살펴보기 전에 먼저 django admin에 대한 걸 알아봅시다.

우리가 이렇게 model을 구성하고나서 과연 이 model들에 대한 정보는 어디서 볼 수 있을까요?

바로 django admin이라는 곳에서 볼 수 있습니다.(django admin에 대한 좀 더 자세한 내용은 다음 챕터에서 다루겠습니다.)

 

django admin에 접속하면 내가 작성한 model들이 있고, 이 model들에 저장된 정보들을 볼 수 있습니다.

위 코드의 내용은 django admin에 표시될 내용들을 설정해주는 부분입니다.

 

db_table = 'user' 이 부분은 이 ModelUser라는 model의 database table명을 user라고 하겠다는 뜻입니다.

verbose_name은 django admin에서 model 이름을 'Model_user'라고 표시하겠다는 뜻입니다.

verbose_name_plural은 django admin에서 model이름을 표시할 때 복수형 이름을 설정해주는 곳입니다. 저는 복수형 이름도 'Model_user'로 동일하게 설정한 것을 알 수 있습니다.

 

 

    def __str__(self):
        return self.username

 

django에서 해당 model에 저장된 Data를 볼 수 있습니다.

만약 5명의 user가 회원가입을 했으면 user model에는 각각의 유저 정보를 담은 5개의 행(row)이 생기게 됩니다.

이때 각각의 행을 django admin 화면에 표시할 때 어떤 정보를 대표 이름으로 표시할지를 설정해줄때는 위처럼 코드를 입력해주면 됩니다.

저는 username 컬럼의 데이터를 각 행의 대표로 표시해주겠다는 뜻입니다.

 

 

 

 

 

 

여기까지 해서 user model의 구성은 끝났습니다.

하지만 실제로 model을 사용하기 위해선 migration이라는 작업을 거쳐야합니다.

 

terminal에서 manage.py 파일이 존재하는 pro directory로 이동하여 아래 명령어를 실행합시다.

pro % python manage.py makemigrations

 

그러면 아래와 같은 메세지가 뜰겁니다.

Migrations for 'user':
  app/user/migrations/0001_initial.py
    - Create model ModelUser

 

그리고 아래 명령어를 입력해 최종 migrate을 해줍니다.

pro % python manage.py migrate

 

* migrate 에러

migration 진행 시 에러가 뜨는 경우가 있습니다.

여러 가지 이유가 있겠지만 app을 제대로 등록하지 않아서 생기는 error가 있습니다.

이전 챕터에서 생성한 app을 settings.py 파일에 등록하는 과정 기억나시나요?

만약 settins.py에 user app이 제대로 등록되어있지 않다면 migration과정에서 에러가 날 테니 에러가 뜬다면 app이 제대로 등록되어있는지 확인합시다.

 

 

migration을 완료하면 위 이미지처럼 user app의 migratoins라는 directory에 0001_initial.py라는 파일이 생성될겁니다.

이 파일에는 방금 내가 model을 생성하고 진행한 migrate 정보가 담겨있습니다.

 

추후에 model을 수정할 필요가 있을 때에도 model 수정 후 migration을 진행해야하는데, 이렇게 되면 새로운 initial 파일이 추가될 것입니다.

 

 

 

 

여기까지 해서 user app의 model 구성이 끝났습니다.

 

다음 챕터에선 django admin에 대해 알아보겠습니다.

 

 

 

 

 

728x90
반응형
Comments