인프런 파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 보고 정리한 내용입니다.
강의 내용 정리
강의명 : 파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
강의: 장고 admin을 통한 데이터 관리
django admin
django.contrib.admin 앱을 통해서 제공됨
- 디폴트 경로: /admin/
- 혹은 django-admin-honeypot앱을 통해 가짜 admin 페이지 노출
- 동일한 기능 제공. 단 이 방법 사용시 admin을 다른 경로로 변경해두고, /admin/을 honeypot가 mapping 하게 됨. 이 앱에서는 로그인 할 사람의 IP을 기록해두게 됨.
모델 클래스 등록을 통해서 조회/추가/수정/삭제 웹 ui를 제공함
- 서비스 초기에 데이터베이스 관리도구로 유용
- 관리도구 만들 시간 줄이고 End-User 서비스에 집중 할 수 있음
내부적으로 django form 적극적으로 사용
model을 만들어도 admin상에서 사용하기 위해서는 따로 등록하는 과정이 필요함!!!
Admin에 Model Class 등록 방법
model 등록은 한번만 됨
이미 등록된 model에 한해서는 unregister해야만 새롭게 등록 가능
등록법 #1
1
admin.site.register(Item) #기본 ModelAdmin으로 동작
아래와 같이 앱 디렉토리의 admin.py파일에 입력해주고 저장한다.
그러면 아래와 같이 /instagram (등록한 앱 URL)로 가면 Model이 뜸
등록법 #2
1
2
3
class ItemAdmin(admin.ModelAdmin):
pass
admin.site.register(Item,ItemAdmin) #지정한 ModelAdmin으로 동작
등록법 #3
1
2
3
@admin.register(Item)
class ItemAdmin(admin.ModelAdmin):
pass
/str 표현
JAVA의 toString처럼 파이썬에서도 어떤 객체에 대해서 문자열로 표현해야 하는 경우가 있음
1
2
3
4
5
6
7
8
9
# Create your models here.
class Post(models.Model):
message = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
#아래처럼 작성
def __str__(self):
return f"Post object ({self.id})" #이 부분은 custom 가능
그럼 Post를 만들 경우 다음과 같이 이름이 지정도미
list display 표현
보여줄 컬럼을 지정할 수 있음
아래와 같이 list_display를 primary key로 지정한다면
1
2
3
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ['pk'] #pk는 primary key에 대한 별칭
아래와 같이 뜸 (primary key인 id가 1이기 때문에 1)
좀 더 explicit하게 표시할 컬럼들을 명시해주었을때의 결과
1
2
3
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ['id','message','created_at','updated_at'] #pk는 primary key에 대한 별칭
list_display_links
list_display 지정된 이름 중에, detail 링크를 걸 속성 리스트
1
2
3
4
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ['id','message','created_at','updated_at'] #pk는 primary key에 대한 별칭
list_display_links=['messages']
Member Function 추가 (models.py에서)
1
2
3
4
5
6
#instagram/admin.py
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ['id','message','message_length','created_at','updated_at'] #pk는 primary key에 대한 별칭
list_display_links=['messages']
멤버 function 컬럼 이름 변경
Member Function 추가 (admin.py에서)
Search_fields 속성 정의
admin내 검색 UI를 통해, DB를 통한 where 쿼리 대상 필드 리스트
list_filter 속성 정의
지정 필드값으로 필터링 옵션 제공