2.장고 admin을 통한 데이터 관리
장고 admin을 통한 데이터 관리
django.contrib.admin 앱을 통해 제공
- default 경로 : /admin/ -> 실제 서비스에서는 알 수 없게 다른 주소로 변경 권장
- django-admin-honepot 앱을 통해 가짜, admin 페이지 노출
# /프로젝트/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls), # URL Reverse (주소를 변경해도 알아서 찾아가는 기능)
path('blog1/', include('blog1.urls')),
]
- 장고는 기본적인 CRUD를 지원하는 웹UI를 제공한다. 이를 admin이라고 하며 모델 등록을 통해 사용 가능
- CMS로 활용할 정도는 아니고 서비스 초기에 관리도구로 제격
- 관리도구를 만들 시간을 줄이고 End-User 서비스에 집중
- 내부적으로 Django Form을 적극적으로 사용
모델 클래스를 admin에 등록하기
admin에 등록은 1번만 가능하며 이미 등록된 register에 대해서는 unregister를 하고 사용해야함
# 앱/admin.py
# Item은 모델 클래스명
from django.contrib import admin
from .models import Item
# 등록법 1
admin.site.register(Item) # 기본 ModelAdmin으로 동작
# 등록법 2
class ItemAdmin(admin.ModelAdmin):
pass
admin.site.register(Item, ItemAdmin) # 지정한 ModelAdmin으로 동작
# 등록법 3
@admin.register(Item)
class ItemAdmin(admin.ModelAdmin):
pass
모델 클래스에 __str__을 구현
- Admin 클래스에서 list_display를 지정하지 않으면 기본적으로 class.__str__()의 리턴값을 출력하기 때문에 __str__ 설정을 통해 정의
# 앱/models.py
from django.db import models
class Post(models.Model):
message = models.TextField()
is_publish = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
#return f'Custom Post object ({self.id})'
return self.message
# 인자 없는 속성 지정 가능 (admin단 에서도 구현 가능하나 자주 사용할 경우 model단에서 활용)
# def message_length(self):
# return len(self.message)
# message_length.short_description = "메세지 글자수"
admin의 다양한 속성 정의
- list_display : 모델 리스트에서 출력할 cloumn 지정
- list_display_links : list_display에서 링크를 지정하는 속성 리스트
- search_field : admin내 검색UI를 통해, DB를 통한 where 쿼리 대상 필드 리스트 (검색창)
- list_filter : 지정 필드 값으로 필터링 옵션 제공 (오른쪽 사이드 바)
from django.contrib import admin
from .model import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ['id', 'message', 'message_length', 'created_at', 'updated_at']
list_display_links = ['message']
list_filter = ['created_at']
search_fiedls = ['message']
# admin, model에서 어느 곳에서나 구현 가능
def message_length(self):
return len(self.message)
message_length.short_description = "메세지 글자수"
댓글남기기