Django Admin 기본 설정하기

2019. 3. 25. 19:44개발을 파헤치다/Django

반응형
Django Admin이란?
Django는 Python으로 개발된 풀 스택 웹 프레임워크입니다.

수 많은 웹 프레임워크가 존재하지만 그 중 Django를 사용하는 이유 중 하나는 바로 관리자 페이지 즉, Admin 사이트가 함께 제공이 된다는 것입니다.

어떤 서비스를 운영할 때 관리자 페이지는 반드시 필요합니다. 따라서 실제 서비스의 서버단에는 아래와 같은 항목들이 필요한 것입니다.

  • 데이터베이스 설계 및 구성
  • 모바일 클라이언트와 통신을 위한 REST API
  • 서비스 운영을 위한 관리자 페이지
서비스 규모에 따라 다르지만 위의 모든 일을 소수의 서버 개발자로 처리하기는 어려움이 따릅니다.
특히, 규모가 크지 않은 서비스 초기의 스타트업에서는 말할 것도 없지요.

Django는 위의 세가지를 좀 더 쉽게 할 수 있도록 돕습니다.



  • Django ORM을 통한 데이터베이스 모델링 및 구성
  • Django REST Framework를 사용하여 쉽고 빠르게 REST API 설계 및 구현
  • Django에서 기본적으로 제공하는 Admin 페이지
Django Admin은 DB 모델링에 따라 자동으로 관리자 페이지를 생성해줍니다. 또한, 관리자 페이지에 공통적으로 필요한 부분들을 제공합니다.

예를 들어,

  • Superuser 및 일반 staff에 따라 다른 권한 및 기능을 줄 수 있습니다.
  • 기본적인 비밀번호 변경 기능이 구현되어 있습니다.
  • 페이징이 구현되어 있습니다.

위와 같은 부분과 더불어 Django Admin은 다양하게 커스터마이징이 가능하다는 장점이 있습니다.
물론 프레임워크인만큼 운영중인 서비스에 완전히 적합하게 커스터마이징하는 것은 힘듭니다.
하지만, 서비스 규모가 아주 크지 않거나 프로토타입을 구현하는 프로젝트라면 충분히 서비스를 운영가능한 수준으로 커스터마이징을 할 수 있습니다.

이제 기본적으로 Django Admin을 구성하는 방법을 알아봅니다.

Django Admin 기본 구성
Django 프로젝트를 생성하고 Application을 생성하면 아래와 같은 디렉토리 구조를 가지게 됩니다.
- example_project
  - example_project
    - settings.py
    - urls.py
    - wsgi.py

  - your_application
    - /migrations
    - models.py
    - apps.py
    - tests.py
    - views.py
    - admin.py
Application의 models.py에서 데이터베이스 모델링을 통해 테이블을 생성합니다.
그리고 하나의 모델에 대한 관리자 페이지 설정을 admin.py에서 할 수 있습니다.

Admin의 기본 구조를 설명하기 전에 먼저 모델이 정의가 되어있어야 합니다.

아래와 같이 User 모델이 정의되어 있다고 가정합시다.
# models.py

from django.db import models

GENDER = (
    ('male', 'male'),
    ('female', 'female'),
)
class User(models.Model):
    id = models.AutoField(primary=True)
    name = models.CharField(max_length=30)
    gender = models.CharField(max_length=7, choices=GENDER)
    cellphone = models.CharField(max_length=11)


이제 admin.py에 다음과 같이 구현하여 어드민 페이지에 특정 모델에 대한 관리자 페이지를 추가합니다.
# admin.py

from django.contrib import admin

class UserAdmin(admin.ModelAdmin):
    list_display=()
    fields=()

    
admin.site.register(User, UserAdmin)

위처럼 Admin 클래스를 만들고 표현하려는 모델과 함께 엮어 Admin 사이트에 등록하게 됩니다.

그럼 /admin으로 URL에 접근했을 때 User에 대해 생성/ 수정/ 삭제를 할 수 있는 항목이 생겨납니다.

Admin 페이지에서 하나의 모델에 대해 데이터 목록을 나타내고, 데이터를 생성 및 수정하려면 아래의 두가지 설정이 되어야 합니다.

  • list_display
  • fields

이제 그 방법을 알아보도록 합니다.



데이터 목록 나타내기
list_display는 User 모델을 Admin 페이지 목록에서 나타낼 때 보여줄 필드들을 설정할 수 있는 항목입니다.

즉, 아래처럼 설정하면 
# admin.py

from django.contrib import admin

class UserAdmin(admin.ModelAdmin):
    list_display=('id', 'name', 'cellphone',)
    fields=()

    
admin.site.register(User, UserAdmin)


Admin 페이지에서 User 데이터의 목록에 id, 이름, 전화번호 필드가 나타나게 됩니다. 

생성 및 수정 Form 나타내기

Admin 페이지에 User 데이터가 목록으로 나타나면 이를 수정할 수 있어야합니다.
또한, 새로운 User 데이터를 생성할 수도 있어야 겠죠?

fields 항목은 수정 및 생성 시 어떤 필드들을 입력할 것인지 선택할 수 있게 해줍니다.

따라서 아래와 같이 설정하면
# admin.py

from django.contrib import admin

class UserAdmin(admin.ModelAdmin):
    list_display=('id', 'name', 'cellphone',)
    fields=('name', 'cellphone', 'gender',)

    
admin.site.register(User, UserAdmin)


생성 및 수정 시 이름, 핸드폰 번호, 성별을 입력할 수 있는 창이 나타나게 됩니다.

주의할 점은 Model에 초기값(default)이 설정되어있지 않거나, null이 True로 되어있지 않은 필드는 fields에 나타내어 값을 입력해주지 않으면 에러가 발생한다는 점입니다.




반응형