Server/django

[Django] 장고 기초 - model & admin

또잉코딩 2019. 12. 28. 17:41

model과 admin이 무엇인지 알아보기 위해서 블로그 웹 사이트를 만들어 볼게요.

 

먼저, model을 만들어 봅시다.

일반적인 블로그 게시글은 제목, 작성일자, 본문 형태로 되어있죠?

이를 포함하는 내용을 가진 클래스를 만들어 볼게요.

 

앱 폴더 안 models.py 파일에서 클래스를 정의해주겠습니다.

title, pub_date, body는 모델 Blog의 속성들입니다.

 

title 속성은 최대 length 200인 문자열로 정의한다.

pub_date 속성은 날짜와 시간으로 정의한다.

body 속성은 긴 문자열로 정의한다.

뜻은 이 정도로 알고 있으면 될 것 같습니다.

 

위와 같이 model을 정의했으면 다음과 같은 명령을 내려줘야합니다

$ python manage.py makemigrations : migration 만들기

$ python manage.py migrate : 데이터베이스에 적용하기

 

cf. migration이란?

Django python으로 작동하는 웹 프레임워크이지만 DB의 경우는 그렇지 않습니다. 그래서 작성한 python 코드를 DB가 알아 듣게 설명해줘야하는 작업이 필요합니다. 위의 makemigrations는 내가 짠 파이썬 코드를 DB가 알아들을수 있게 번역하는 명령어이고, migrate DB에 그 내용을 적용하라는 명령어입니다.

 

 

admin 페이지란?

admin 페이지는 사이트 관리자가 컨텐츠를 편집할 수 있는 통합적인 인터페이스를 제공합니다. 즉, 사이트 관리자를 위한 페이지입니다127.0.0.1:8000/admin 으로 접속합니다.

 

이를 위해 관리자 계정을 생성해주어야 합니다.

$ python manage.py createsuperuser

다음과 같은 명령을 내리면 아이디와 이메일주소, 비밀번호를 입력하라는 내용이 터미널에 나옵니다.

(password 입력시 아무것도 안나오는 것 같지만 보안상의 이유로 보이지 않을뿐 키보드는 정상작동합니다.)

 

생성된 계정으로 웹페이지로에서 로그인 해보면 다음과 같은 창이 뜨게 됩니다.

아까 만든 model을 확인하려고 admin페이지에 들어왔는데 Blog가 보이지 않습니다. 왜냐하면 django에게는 우리가 model을 만들었다는 걸 migrate를 통해 알렸지만, admin에게는 알려주지 않았기 때문입니다.

 

따라서, 앱 폴더 안 admin.py 파일에서 model을 등록해줍니다.

다시 웹 페이지에 가서 add 버튼을 누르면 title, Date publiched, body를 담은 게시글 입력 화면이 뜹니다.

계속해서 글을 하나 작성해보면 제목에 title이 아닌 Blog object(1) 라는게 생겼다

title을 보여주기 위해서는 앱 폴더 안 models.py Blog 클래스를 수정해주면 됩니다.

마지막에 __str__이라는 함수를 추가하였는데

이는 Overriding(오버라이딩)하여 함수를 재정의 한 것입니다.

 

이로써 model을 만들어보고,  admin 계정을 통해 블로그 글을 써보았습니다.