Lina's Toolbox

Django Admin 본문

관리자 페이지 (Admin Site)

우리가 운영을 하다보면..

  • 실제 서비스를 운영하다보면 서비스를 관리하는 페이지가 필요합니다.
  • 모든 관리자에게 DB를 열어주거나, 매번 SQL을 입력해서 보거나 수정할 수 는 없기때문입니다.
    (콜센터 직원 등, 비개발자들이 디비에 접근해야할 경우를 위해!)

이런 이유로 관리자용 페이지가 필요합니다.

 

Django의 Admin Site

  • Django는 기본적으로 관리자 사이트를 제공하고 있습니다. (심지어 이쁨)
  • Django Framework를 선택하는 이유가 되기도하는 강력한 장점 중 하나입니다.
  • 직접 record를 조회, 생성, 수정, 삭제할 수 있는 모든 기능을 제공합니다.
  • 이외에도 각종 권한 부여를 해서 제한하거나, 페이지 자체를 커스텀 하는 것도 가능합니다!

project app / urls.py

path("admin/", admin.site.urls),

이렇게 정의하고 admin경로에 들어가보면…

urls.py의 path("admin/", admin.site.urls)은, 우리가 설정해준게 아닌 설정 초반때부터 있었다!

 

프로젝트 생성시부터 존재하던 그 페이지 !

Django에서 기본적으로 제공하는 관리자 페이지가 나옵니다!

 

모든 유저가 다 여기서 들어갈 수 있는 것은 아니고,

is_superuser > is_staff 더 큰 권한이 필요합니다.

어드민 페이지에 접근하려면 최소 is_staff =1 이여야함.

 

직접 사용해보기

admin 계정 생성

python manage.py createsuperuser
  • 최소 is_staff 권한이 필요합니다.

admin에서 관리할 모델 등록

  • 관리자 페이지에서 사용할 모델은 직접 등록해주는것이 필요합니다.
  • 각 앱의 admin.py에서 설정 가능합니다.

 

articles

기본 등록하기

# articles/admin.py
from django.contrib import admin
from .models import Article

admin.site.register(Article)

이렇게 등록한 뒤 살펴보면 조금 전 등록한 모델이 보입니다!

등록한 모델은 관리자 페이지에서 접근 가능합니다.

 

Users는 있는데.. 우리가 원하는 articles나 다른 테이블들은??

→ 등록만 해주면됨!

→ 각각의 앱에 이미 admin.py가 있다.

 

심지어 글 수정, 삭제도 된다! 글 추가까지 됨 CRUD모두 가능

기본적인 CRUD를 모두 포함하고 있습니다.

 

 

커스텀 하기

  • 이렇게 모델을 추가했습니다. 그러나 만약 게시글의 수가 많아진다면 관리하기가 힘들겠죠?
  • 원하는 게시물만 검색해볼 수 있게 하면 좋을 것 같네요.
  • 작성일을 기준으로 정렬해서 볼 수 있게하면 좋을 것 같아요.
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ("title", "created_at")
    search_fields = ("title", "content")
    list_filter = ("created_at",)
    date_hierarchy = "created_at"
    ordering = ("-created_at",)

 

보기 수정, 검색, 필터 등 다양한 기능을 간단히 추가 할 수 있습니다.

  • search_fields: 적어준 필드들 내에서 검색하고, 필드들 중 하나라도 검색값과 일치하는 값있으면 리턴
  • 이 밖에도 거의 모든 부분에 대해 커스텀이 가능합니다!
    • 예를 들어 CSS와 Javascript를 사용하여 원하는 대로 커스텀해서 사용하는 것도 가능합니다.
      💡 실제로 현업에서도 장고 어드민 페이지를 커스텀하여 어드민페이지로 많이 사용합니다!
    → 공식문서 참조