Django Admin을 가볍게 써본 기억 정리_10분 내 맛보는 법
장고 Admin은 말 그대로 관리자 페이지로서, 장고 프로젝트 내 구축해놓은 각 앱별 모델, 그 모델을 통한 데이터의 출력과 조작을 간단히 할 수 있게 도와주는 페이지라고 할 수 있다.
시간이 있다면 별도의 앞단을 구현하여 운용하는 것이 최적의 방안이긴 하지만, 토이프로젝트, 일반 프로젝트 중 급히 CMS 또는 어드민이 필요할 경우 기본으로 제공해주는 admin은 정말 좋은 선택이라고 생각한다.
이유를 정리해보자면,
1. 개발입장에서 구현이 간편하다. 존재하는 admin 관련 모델만 상속받아 몇줄만 쳐도 왠만한 데이터 관리가 된다.
2. 장고의 장점 중 하나인 친절한 공식문서를 통해 어떤 기능이 필요할 시 공식문서를 읽고 필요한 기능을 개발하는 것이 가능하다.
3. 웹/모바일 반응형 템플릿을 지원한다. 개발 완료 후 꽤 쓸만한 화면을 보여주어 휴대폰으로도 관리를 가능하게 해준다.
다만, 커스텀하려고 공식문서를 주구장창 읽으면서 하나 구현해내는 것은 공수가 효율성 대비 많이 떨어질 가능성이 높으므로 최대한 기본 모듈, 템플릿 내부에 기안한 기능구현을 하는 것이 좋을 것 같다.
아래 나와있는 Admin 사용법은 내가 써봤던 방법을 그대로 적은 것으로, 인터넷에도 더 좋은 자료들이 많다.
하지만 그냥 고대로 부담없이 따라하면 10분안에 지금 만든 프로젝트 어드민 페이지 띄울 수 있다!
1. 프로젝트, 앱 세팅
장고 프로젝트를 실행하고, 사전 모델링에 따른 앱 설치/연결 진행 후 각 앱에 맞게 모델클래스를 정의해준다.
예시를 위해 간단한 장고 프로젝트를 하나 만들었고 회원관리를 위한 user 앱을 하나 설치, 연결하였다.
└── django_project
├── README.md
├── db.sqlite3
├── django_project
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ ├── settings.cpython-37.pyc
│ │ ├── urls.cpython-37.pyc
│ │ └── wsgi.cpython-37.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── user
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ ├── admin.cpython-37.pyc
│ │ └── models.cpython-37.pyc
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-37.pyc
│ │ └── __init__.cpython-37.pyc
│ ├── models.py
│ ├── tests.py
│ └── views.py
2. Models.py 세팅
이후 user앱 내 models.py에 아래와 같이 모델 클래스를 정의해주었다.
from django.db import models
class User(models.Model):
email = models.EmailField(verbose_name='이메일')
password = models.CharField(max_length=64, verbose_name='비밀번호')
register_date = models.DateTimeField(auto_now_add=True, verbose_name='등록일자')
def __str__(self):
return self.email
class Meta:
db_table = 'django_user'
verbose_name_plural = '사용자'
User 클래스 내 이메일, 비밀번호, 등록일자를 각 들어올 값을 생각하여 필드를 정해주었다.
다음,
1. 아래 __str__ 메소드를 이용, 함수 생성: 모델 클래스 객체의 문자열을 리턴하는 함수를 만든 것이다.
나와 같이 email로 지정 시 admin 페이지에서 user object(1), user object(2) 이게 아닌 email 명으로서 객체 이름이 나타나게 된다.
2. 메타클래스 속성 중 verbose_name_plural 설정: 관리자 화면에 나올 모델 명칭을 선언하기 위한 속성이라고 봐도 무방할 것 같다.
- 모델명칭을 영문으로 표현하고 싶다면: verbose_name: 단수(User) verbose_name_plural: 복수(Users)로 표현할 수 있다.
- 모델명칭을 국문으로 표현하고 싶다면: verbose_name 또는 verbose_name_plural 중 하나만 사용하면 된다.
verbose_name 또는 verbose_name_plural 중 하나를 사용하여 모델명을 표현하면 된다.
3. Admin.py 세팅
from django.contrib import admin
from .models import User
from order.models import Order
class UserAdmin(admin.ModelAdmin):
list_per_page = 10
list_display = ('id', 'email','order_count')
list_editable = ('email')
list_filter = ('email')
search_fields = ('email')
ordering = ('email')
def order_count(self.obj)
return Order.objects.filter(order_user=obj).count()
order_count.short_description = '주문 횟수'
admin.site.register(User, UserAdmin)
1) 각 앱 내 admin에 등록할 모델 클래스를 import 한다.
2) ModelAdmin을 상속받는 UserAdmin 클래스를 작성한다.
아래 사용할 수 있는 메소드를 지정, 우측에 필요한 컬럼명을 튜플로 저장해놓으면 기능 구현은 끝이다!
- list_per_page: '사용자'화면으로 진입 시 나오는 숫자를 지정할 수 있다. (10으로 지정하면 1페이지 당 10개가 출력된다)
- list_display: 화면에 나타낼 컬럼을 지정한다. 여기서는 id와 email을 지정하였다.
- list_editable: '사용자'화면에서 바로 수정할 수 있는 컬럼을 지정한다. 예시로 email을 지정하였다.
- list_filter: 컬럼별로 정렬할 수 있는 컬럼을 지정한다. 예시로 권한 컬럼이 있다면 관리자/일반사용자와 같이 나누어볼 수 있다.
- search_fields: admin 페이지는 기본적으로 검색을 제공하는데, 검색에 사용할 컬럼을 지정해줄 수 있다.
- ordering: 오름/내림차순으로 정렬할 수 있게 각 컬럼별로 기능을 부여해준다.
- 함수를 하나 만들어봤다.
유저 객체들이 들어올때마다 받아서 이름과 Order 앱 user명과 일치하는 숫자를 세는 (즉, 유저별 주문 count) 함수를 만들었다.
이후 short_description을 dot notation으로 지정해주면 verbose name 띄우는 것이 가능하다.
지금 없는 Order 앱이라 머릿속으로 만든 것이긴 한데 이렇게 함수 구성, 필요한 정보 띄울 수도 있다는 것을 보여주려 작성해보았다.
- 최하단에 admin.site.register(User,Useradmin)으로 admin 페이지가 바라볼 수 있게 세팅
4. 슈퍼유저 생성
manage.py 위치한 곳에서 python manage.py createsuperuser를 통해 슈퍼유저를 생성해놓는다.
이후 개발서버(runserver)를 돌려 기본 설정된 url(/admin)으로 접근하면 ID/PW 창이 나타나는데 생성한 슈퍼유저 정보로 진입한다.
그러면 verbose name이 잘 적용된 각 app들을 만날 수 있고, 클릭 시 세부페이지로 이동이 가능하다.
5. 이외 해볼만한 것
장고 프로젝트 내 admin static file은 django.contrib.admin에서 확인할 수 있다. (깃허브 주소 아래 첨부)
github.com/django/django/tree/master/django/contrib/admin
파일루트 참고하여 Admin 기본 뼈대를 조금씩 건드리는 것도 해볼만 한 것 같다.
6. 마무리
Admin 페이지는 구축해놓은 프로젝트 데이터가 잘 들어갔는지, 어떤식으로 작동하고 있는지 대략적(시각적)으로 매우 그리고 잘 보여주고 있기에 적재적소에 사용시 매우 유용하다고 할수 있다.
참고자료:
1. www.slideshare.net/bbayoung7849/djangoadminsitecustomexample
2. docs.djangoproject.com/en/3.1/ref/contrib/admin/