Skip to content

06 Admin

YeongBaeeee edited this page Apr 16, 2017 · 1 revision

Admin

admin에는 staff/superuser 계정에 한해 접근 가능

모델 클래스만 등록하면, 조회/추가/수정/삭제 웹 인터페이스가 제공

기분 유저 모델의 admin을 바꾸고 싶을때

blog/admin.py

    admin.site.register(Post)
    admin.site.unregister(****) # 이렇게 바꾸는게 맞나?
    admin.site.register(Post)

admin 커스텀하는법

    from django.contrib import admin
    from blog.models import Post
    # 등록법 1
    admin.site.register(Post) # 기본 ModelAdmin으로 등록
    # 등록법 2
    class PostAdmin(admin.ModelAdmin):
        list_display = ['id', 'title', 'content']
    admin.site.register(Post, PostAdmin) # 참고: 같은 모델 중복 등록은 불가
    # 등록법 3 : 장식자 형태로 지원
    @admin.register(Post)
    class PostAdmin(admin.ModelAdmin):
        list_display = ['id', 'title', 'content']
  • 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 지정

Tag Escape

Django 에서는 파이썬 코드/변수를 통해 보여지는 Html Tag 에 대해 Auto Escape 를 수행

a/img/script 태그 등으로 인한 허용치않은 코드 실행 방지 ex) 악성 스크립트 실행, 댓글에 사용자가 html 링크 사용시 적용을 위해

특징 문자열에 한해, 이를 해제하기 위해 autoescape off template tag를 적용하거나, 문자열에 format_html(), format_html_join() ,mark_safe() 적용 EX)

    def content_size(self, post):
        return mark_safe('<strong>{}</strong>글자'.format(len(post.content)))

Admin Actions 예제 연습하다가... 결국

    ValueError: invalid literal for int() with base 10: 'anonymous'

에러 발생... 으아.. 처음부터 다시 해야 할듯...