7. 이번 파이콘 주제가 ‘Back to the basic’ 인 걸 보고,
경험을 공유하고 싶다는 생각이 들었습니다.
8. 이 발표에서 다루는 내용
• Django admin site의 기본적인 사용 방법
• Django admin site를 커스텀 하는 여러가지 방법과 그 결과
• Python
• Django 내부 동작, 구현
9. 들어가기 전에… Django ?
• Documentation
• Middleware
• Model (ORM)
• Form
• Class based view
• Template
Django admin site
10. 발표의 모든 내용은 여기에 있습니다.
• https://docs.djangoproject.com/en/1.11/ref/contrib/admin
• ModelAdmin, InlineModelAdmin, AdminSite, LogEntry
• Overriding admin templates, Reversing admin urls
• https://docs.djangoproject.com/en/1.11/ref/contrib/admin/actions/
• Writing actions, Advanced action techniques
• https://docs.djangoproject.com/en/1.11/ref/contrib/admin/admindocs/
• https://docs.djangoproject.com/en/1.11/ref/contrib/admin/javascript/
11. 순서
1.Django 설치
2.Model을 admin site에 등록하기
3.기본적인 사용법
4.조금 더 심화된 사용법
5.커스텀 페이지 추가
6.UI 변경하기
7.Admin site 분리하기
8.마지막으로 (간단한) 문서화!
12. 예제를 위한 모델
MEMBER
name 이름
email 이메일
permission 권한
certification_date 인증일
is_certificated 인증상태
POST
member 작성자
category 카테고리
title 제목
subtitle 부제목
content 내용
is_deleted 삭제여부
created_at 작성일
COMMENT
member 작성자
post 원글
content 내용
report_count 신고수
created_at 작성일
CATEGORY
name 이름
* permission (관리자, 에디터, 일반)
14. 예제를 위한 모델 - Post
class Category(models.Model):
name = models.CharField('카테고리 이름', max_length=20)
class Post(models.Model):
member = models.ForeignKey(Member, verbose_name='작성자')
category = models.ForeignKey(Category, verbose_name='카테고리')
title = models.CharField('제목', max_length=255)
content = models.TextField('내용')
is_deleted = models.BooleanField('삭제된 글', default=False)
created_at = models.DateTimeField('작성일', auto_now_add=True)
class Comment(models.Model):
member = models.ForeignKey(Member, verbose_name='작성자')
post = models.ForeignKey(Post, verbose_name=‘원본글’)
content = models.TextField()
is_blocked = models.BooleanField('노출 제한', default=False)
15. 순서
1.Django 설치
2.Model을 admin site에 등록하기
3.기본적인 사용법
4.조금 더 심화된 사용법
5.커스텀 페이지 추가
6.UI 변경하기
7.Admin site 분리하기
8.마지막으로 (간단한) 문서화!
16. Django 설치
example $ pyenv virtualenv 3.6.2 pyconExample # 가상 환경 추가
example $ pyenv shell envExample # 가상 환경 실행
(envExample) example $ pip install django # django 설치
(envExample) example $ django-admin.py startproject example # django 프로젝트 생성
(envExample) example $ python manage.py startapp member # member, post 앱 추가
(envExample) example $ python manage.py startapp post
(envExample) example $ python manage.py createsuperuser # 관리자 추가
(envExample) example $ python manage.py runserver # 실행
http://localhost:8000 http://localhost:8000/admin/
17. 순서
1.Django 설치
2.Model을 admin site에 등록하기
3.기본적인 사용법
4.조금 더 심화된 사용법
5.커스텀 페이지 추가
6.UI 변경하기
7.Admin site 분리하기
8.마지막으로 (간단한) 문서화!
18. Model을 admin site에 등록
# member/admin.py
from django.contrib import admin
from member.models import Member
admin.site.register(Member)
# post/amdin.py
from django.contrib import admin
from post.models import Category, Post, Comment
admin.site.register(Post)
admin.site.register(Category)
admin.site.register(Comment)
19. Model을 admin site에 등록
# post/models.py
class Category(models.Model):
class Meta:
verbose_name_plural = "categories"
name = models.CharField(max_length=20)
20. 순서
1.Django 설치
2.Model을 admin site에 등록하기
3.기본적인 사용법
4.조금 더 심화된 사용법
5.커스텀 페이지 추가
6.UI 변경하기
7.Admin site 분리하기
8.마지막으로 (간단한) 문서화!
21. 기본 - List
# member/admin.py
class MemberAdmin(admin.ModelAdmin):
22. 기본 - List
# member/admin.py
class MemberAdmin(admin.ModelAdmin):
list_per_page = 5
23. 기본 - List
# member/admin.py
class MemberAdmin(admin.ModelAdmin):
list_per_page = 5
list_display = (
'id', 'email', ‘username',
'permission', ‘is_certificated',
‘certification_date’, ‘post_count', )
24. 기본 - List
# member/admin.py
class MemberAdmin(admin.ModelAdmin):
list_per_page = 5
list_display = (
'id', 'email', ‘username',
'permission', ‘is_certificated',
‘certification_date’, ‘post_count', )
list_editable = ('permission', )
25. 기본 - List
# member/admin.py
class MemberAdmin(admin.ModelAdmin):
list_per_page = 5
list_display = (
'id', 'email', ‘username',
'permission', ‘is_certificated',
‘certification_date’, ‘post_count', )
list_editable = ('permission', )
list_filter = ('permission', )
66. 문서화
# post/models.py
class Comment(models.Model):
"""
사용들이 작성한 글에 대한 댓글입니다.
댓글은 :model:`post.Post` 와 :model:`member.Member`. 모델과 1:N 관계입니다.
"""
member = models.ForeignKey(Member, verbose_name='작성자')
post = models.ForeignKey(Post, verbose_name='원본글')
content = models.TextField(verbose_name='내용', help_text='댓글 내용입니다.')
67. • 시간이 길지 않아, 준비한 내용은 여기까지입니다.
• 이 외에도 공식 문서에 추가적인 커스텀 방법들이 소개되어 있습니다.
• 예제 코드는 아래에서 확인하실 수 있습니다.
https://github.com/bbayoung/django-admin-site-custom-example
감사합니다.