나의 첫 Django 앱 만들기 - part 2 - 2

어드민 사이트 소개

장고 철학

스태프나 클라이언트가 컨텐츠를 추가, 변경 또는 삭제를 하기 위한 어드민 사이트를 직접 만드는 일은 별로 창조성을 요구하지 않는 아주 지루한 작업입니다. 그런 이유로 장고는 개발자를 대신하여 모든 모델의 어드민 인터페이스를 자동으로 만들어 줍니다. (어드민 사이트는 필자가 장고를 선택하는 가장 큰 이유 중 하나입니다.)

장고는 처음에 컨텐츠를 업데이트하는 "컨텐츠 퍼블리셔 (content publishers)"와 독자들이 컨텐츠를 볼 수 있는 "퍼블릭 사이트 (public site)"가 확실히 분리되어 있는 뉴스 회사의 뉴스룸에서 사용되었습니다. 이 뉴스회사의 사이트 관리자는 복잡한 시스템을 사용하여 뉴스, 이벤트, 스포츠 스코어 등의 업데이트하였고, 업데이트된 컨텐츠는 퍼블릭 사이트에 게재되었습니다. 장고는 이런 복잡한 시스템을 하나의 인터페이스로 묶어, 사이트 매니져들이 컨텐츠를 한곳에서 수정할 수 있게 해주었습니다.

어드민 사이트는 퍼블릭 사이트 유저가 아닌 사이트 관리자를 위한 기능인 것을 기억하여 주십시오.

어드민 유저 만들기

먼저 어드민 사이트에 로그인할 수 있는 유저를 하나 만들어 보도록 하죠. 다음의 명령어를 실행하여 주십시오.

$ python manage.py createsuperuser

원하는 유저네임을 입력한 후, 엔터키를 눌러 주십시오.

Username: admin

어드민이 사용하고 있는 이메일 주소를 입력하여 주십시오.

Email address: admin@example.com

필자의 말

이 이메일 주소는 프로덕션 사이트에 어떤 문제가 발생했을 때 장고가 자동으로 에러 리포팅을 해주는 이메일 주소입니다. 이 설정에 대해서는 나중에 자세히 다루도록 하겠습니다.

마지막으로 패스워드를 입력하여 주십시오. 패스워드를 2번 입력하여 주십시오. 두번째는 첫번째 입력한 패스워드의 확인 절차입니다.

Password: **********
Password (again): *********
Superuser created successfully.

개발용 서버 기동

장고 어드민 사이트는 기본적으로 활성화 되어 있습니다. 개발용 서버를 기동하고 어드민 사이트를 구경해보도록 하지요.

만약 서버가 멈춰있는 상태이면 다음의 명령어로 기동하여 주십시오.

$ python manage.py runserver

서버가 기동 되었다면 웹 브라우져의 주소창에 로컬 도메인에 "/admin/"을 추가한 주소를 입력하여 주십시오. e.g., http://127.0.0.1:8000/admin/. 어드민 사이트의 로그인 페이지가 보일겁니다.

Django admin login page

디폴트로 translation 기능이 활성화되어 있으므로 로그인 스크린은 장고가 지원하는 언어라면 브라우져에 설정된 언어로 표시될 겁니다. 

어드민 사이트 들어가기

이제 수퍼유저 어카운트를 만들었으니 로그인을 해보죠. 로그인을하면 장고 어드민 인덱스 페이지를 볼 수 있을 겁니다.

django admin index page

수정 가능한 컨텐츠인 그룹과 유저가 보일 겁니다. 이것들은 장고에 포함되어 있는 인증 프레임워크인 django.contrib.auth가 제공하는 모델입니다.

어드민 사이트에서 투표 앱 사용하기

그런데 우리가 만든 투표 앱은 어디에 있을까요? O.o 어드민 인덱스 페이지에 보이지 않네요.

Question 오브젝트를 어드민 사이트에서 사용하려면 어드민 앱에게 Question 오브젝트가 어드민 인터페이스를 가지고 있다고 얘기해 줘야 합니다. 그러기 위해서 polls/admin.py 파일을 다음과 같이 수정하여 주십시오.

polls/admin.py
from django.contrib import admin

from .models import Question

admin.site.register(Question)

무료 어드민 기능 구경하기

이제 Question을 어드민 사이트에 등록 하였으니 다음과 같이 어드민 사이트 인덱스 페이지에 표시될 것입니다. 

django admin index page with Question objects
“Questions”을 클릭하면 question 오브젝트를 수정할 수 있는 “change list” 페이지로 이동합니다. 이 페이지는 데이터베이스에 저장되어 있는 모든 question 오브젝트를 선택하여 수정할 수 있게 도와줍니다. 우리가 이전 강좌에서 만든 “What’s up?” question 이 보입니다.

django admin change page
“What’s up?” question을 클릭하여 수정해 봅시다.

django admin change question
 여기서 짚고 넘어가야할 것:

  • Question 모델로 부터 폼은 자동 생성됩니다.
  • 다른 모델 필드 타입은 (DateTimeFieldCharField) 각각에 맞는 HTML input 위짓으로 만들어 집니다. 각 필드 타입은 자신이 장고 어드민내에서 어떻게 표시되야 하는지를 알고 있습니다.
  • 각 DateTimeField 필드는 무료 자바스크립트 숏컷을 가지고 있습니다. 날짜는 “Today” 라는 숏컷과 달력 팝업을, 시간은 “Now” 라는 숏컷과 많이 쓰여지는 시간이 정의된 편리한 팝업을 가지고 있습니다.

이 페이지는 기본적으로 제공하능 옵션:

  • Save – 변경 내용을 저장하고, 다시 같은 모델의 change-list 페이지로 이동.
  • Save and continue editing – 변경 내용을 저장하고, 현재 오브젝트의 페이지를 리로딩하여 계속 수정하게끔 함.
  • Save and add another – 변경 내용을 저장하고, 같은 모델의 오브젝트를 만들 수 있도록 새로운 폼을 열어 줍니다.
  • Delete – 오브젝트를 삭제하고 확인 페이지로 이동.

“Date published”의 시간이 나의 첫 Django 앱 만들기 - part 2 - 1에서 오브젝트를 만들었던 시간과 일치하지 않는다면 TIME_ZONE 셋팅이 잘 되어 있지 않기 때문일 것입니다. 다시 변경하신 후, 페이지를 리프레쉬하신 후에 맞는 시간이 출력되었는지 다시 확인하여 주십시오.

필자의 말

"settings.py" 파일의 디폴트 설정인 TIME_ZONE = 'UTC'TIME_ZONE = 'Asia/Seoul'로 변경하여 주십시오. 만약 다른 나라의 타임존을 알고 싶으시면 파이썬 쉘에서 다음의 코드를 입력하여 주십시오.

>>> import pytz
>>> pytz.all_timezones

“Today” 와 “Now” 숏컷을 클릭하여 “Date published”을 변경하여 주십시오. 그리고 “Save and continue editing”을 클릭한 후, 오른쪽 위에 있는 “History” 버튼을 클릭하여 주십시오. 이 오브젝트에 대해서 장고 어드민이 변경한 모든 변경사항이 타임스탬프와 변경을 실행한 유저의 유저네임과 함께 리스팅되는 페이지를 볼 수 있습니다.

django admin change history

모델 API와 어드민 사이트 사용에 익숙해지면 다음 강좌인 나의 첫 Django 앱 만들기 - part 3 - 1에서 우리의 투표 앱에 더 많은 뷰를 추가하는 방법을 배워봅시다.


blog comments powered by Disqus