티스토리 뷰
Django Admin
- staff/superuser 계정에 한해 접근 가능
- 모델 클래스만 등록하면, 조회/추가/수정/삭제 웹 인터페이스가 제공
- 장고가 제공하는 기본 앱에서 확인 가능 함
INSTALLED_APPS = [ 'django.contrib.admin', ] |
ex) 맛집 등록서비스 관리자가 어드민 페이지를 통해 기본 포맷과 인터페이스를 지정하고, 이후 사용자들에게 사용하도록 만들수 있다.
# Model Admin 등록법 1
from django.contrib import admin from blog.models import Post admin.site.register(Post) # 기본 ModelAdmin으로 등록 |
# Model Admin 등록법 2
- admin.ModelAdmin을 상속받아 어드민페이지내 커스터마이징이 가능함
from django.contrib import admin from blog.models import Post class PostAdmin(admin.ModelAdmin): list_display = ['id', 'title', 'content'] admin.site.register(Post, PostAdmin) # 참고: 같은 모델 중복 등록은 불가 |
#(선호) Model Admin 등록법 3 : 장식자 형태로 지원
from django.contrib import admin from blog.models import Post @admin.register(Post) class PostAdmin(admin.ModelAdmin): list_display = ['id', 'title', 'content'] # Post 어드민페이지에 보여줄 필드명 지정 |
<id, title, content>
ModelAdmin 옵션
• list_display : Admin 목록에 보여질 필드 목록. • list_display_links : 목록 내에서 링크로 지정할 필드 목록. • 이를 지정하지 않으면, 첫번째 필드에만 링크가 적용 • list_editable : 목록 상에서 수정할 필드 목록 • list_per_page (디폴트 : 100) : 페이지 별로 보여질 최대 갯수 • list_filter : 필터 옵션을 제공할 필드 목록 • actions : 목록에서 수행할 action 목록 • fields : add/change 폼에 노출할 필드 목록 • fieldsets : add/change 폼에 노출할 필드 목록 (fieldset) • formfield_overrides : 특정 Form Field 에 대한 속성 재정의 • form : 디폴트로 모델 클래스에 대한 Form Class 지정 |
list_dispaly 옵션
- 모델 인스턴스 필드명/속성명/함수명 뿐만 아니라, ModelAdmin 내 멤버 함수도 지정 가능
- 외래키를 지정한다면, 관련 object의 __str__() 값이 노출
- ManyToManyField 미지원
from django.contrib import admin from django.utils.safestring import mark_safe from .models import Post # admin.ModelAdmin @admin.register(Post) class PostAdmin(admin.ModelAdmin): list_display = ['id', 'title', 'content', 'content_size'] actions = ['make_draft','make_withdrawn','make_published',] def content_size(self, post): return mark_safe('<strong>{}글자</strong>'.format(len(post.content))) content_size.short_description = '글자수' |
Tag Escape
• Django 에서는 파이썬 코드/변수를 통해 보여지는 Html Tag 에 대해 Auto Escape 를 수행
• a/img/script 태그 등으로 인한 허용치않은 코드 실행 방지
ex) 악성 스크립트 실행
• 특징 문자열에 한해, 이를 해제하기 위해 autoescape off template tag를 적용하거나, 문자열에 format_
Admin Actions
대개 선택된 Model Instance 들에 대해 Bulk Update 용도 구현
1. ModelAdmin 클래스내 멤버함수로 action 함수를 구현
• 멤버함수.short_description 을 통해, action 설명 추가
2. ModelAdmin actions 내에 등록
모델 status 컬럼 추가 및 마이그레이션
# blog/models.py STATUS_CHOICES = ( ('d', 'Draft'), ('p', 'Published'), ('w', 'Withdrawn'), ) class Post(models.Model): status = models.CharField(max_length=1, choices=STATUS_CHOICES) > python3 manage.py makemigrations blog > python3 manage.py migrate blog |
# blog/admin.py admin action 추가 from django.contrib import admin from django.utils.safestring import mark_safe from .models import Post # admin.ModelAdmin @admin.register(Post) class PostAdmin(admin.ModelAdmin): list_display = ['id', 'user', 'title','created_at','status','content_size'] actions = ['make_draft','make_withdrawn','make_published',] def content_size(self, post): return mark_safe('<strong>{}글자</strong>'.format(len(post.content))) content_size.short_description = '글자수' #content_size.allow_tags = True ## html 태그사용 ,조만간 사라짐 def make_draft(self, request, queryset): update_count = queryset.update(status='d') # QuerySEt 사용 self.message_user(request, '{}건의 포스팅을 draft상태로 변경'.format(update_count)) # django message framework 사용 make_draft.short_description = '지정 포스팅을 draft 상태로 변경 합니다.' def make_published(self, request, queryset): update_count = queryset.update(status='p') # QuerySEt 사용 self.message_user(request, '{}건의 포스팅을 Published상태로 변경'.format(update_count)) # django message framework 사용 make_published.short_description = '지정 포스팅을 Published 상태로 변경 합니다.' def make_withdrawn(self, request, queryset): update_count = queryset.update(status='w') # QuerySEt 사용 self.message_user(request, '{}건의 포스팅을 withdrawn상태로 변경'.format(update_count)) # django message framework 사용 make_withdrawn.short_description = '지정 포스팅을 withdrawn 상태로 변경 합니다.' |
"""본 내용은 AskDjango VOD, "장고 차근차근 시작하기" 강의내용을 참고하여 작성했습니다.(https://nomade.kr/)"""
'Python > * Django' 카테고리의 다른 글
8. Http Status Code 404 (0) | 2017.12.13 |
---|---|
7. 모델을 통한 데이터 CRUD (0) | 2017.12.12 |
5. Migration (0) | 2017.12.12 |
4. Django Model과 Model Fields (0) | 2017.12.12 |
3. View Overview (0) | 2017.12.12 |