도전 과제는 이전 게시글로서 끝이지만
나는 여기서 한 발짝 더 나가고 싶은 욕망이 생겼다.
그 욕망의 내용은 아래와 같다.
바로 Admin 권한을 가진 User들만 볼 수 있고 사용할 수 있는
Admin Permission 기능이다.
이 기능들은 위의 사진과 같이
빌린 책들의 목록을 보고 수정이 가능한
All borrowed에서 이름을 바꾼
Borrowed Management와
모든 책들을 추가, 수정, 삭제할 수 있는
Book Management
마지막으로
모든 작가들을 추가, 수정, 삭제할 수 있는
Author Management이다.
이런 기능을 구현하기 위해
다음과 같은 프로세스를 거칠 필요가 있다.
Borrwoed Management는 이름만 바꾸면 되고,
Book Management는
먼저 디폴트 화면은 모든 책의 리스트를 보여주고
이 책의 각각의 요소들을 수정, 삭제가 가능하며
하단에는 추가도 할 수 있는 기능을 제공하게 한다.
Author Management도 Book Management와 동일하게
디폴트 화면은 모든 작가들의 리스트를 보여주고
이 작가들의 각각 요소들을 수정, 삭제 가능하며
하단에는 추가도 할 수 있는 기능을 제공하게 하는 것이 목표이다.
이를 구현하기 위한 Model, View, Template는
각각 아래와 같은 솔루션으로 구현한다.
Model : 기존 Model들을 참고
View : 요소 리스트는 Function 기반,
추가,수정,삭제는 제너릭 편집 View 이용
Template : 요소 리스트는 Function 기반이기 때문에
이전 코드 참고
추가, 수정, 삭제는 제너릭 편집 View를 이용 하기 때문에
관련 코드 참고
먼저 All Borrowed를 Borrwoed Management로 바꿔보자.
이는 매우 간단한데,
먼저 catalog/templates/ 경로에 있는
base_generic.html 파일을
위와 같이 수정해 주기면하면 된다.
물론 이름이 바뀌면 가급적
URL 이름을 포함해 관련 함수들의 이름도
바꿔주어야 하는 것이 가독성 향상에 도움이 되겠지만
이는 시간 상 고려하지 않고 넘어가기로 하겠다.
엔터프라이즈 급의 배포용 애플리케이션이라면 하는 것이 좋을 것이다.
<!-- <li><a href="{% url 'all-borrowed' %}">All borrowed</a></li> -->
<li><a href="{% url 'all-borrowed' %}">Borrowed Management</a></li>
<li><a href="{% url 'manage-book' %}">Book Management</a></li>
<li><a href="{% url 'manage-author' %}">Author Management</a></li>
이 곳을 수정하는 김에 위와 같이
Book Management와 Author Management도 추가해보자.
물론 여기서 화면에 표시되는지 확인해볼 수는 없다.
왜냐하면 아직 Model, View, Template를 작성하고
URL에 추가하지 않았기 때문이다.
이제 본격적으로 기능을 작성해보자.
먼저 Book Management부터 해보자.
Book Management 구현
Model은 이미 만들어져 있기 때문에
만들어야 될 것은 View와 Template 뿐 이다.
선행으로 만들어야 할 View와 Template는
모든 Book List를 보여주는 View와 Template이다.
이것부터 작성해보자.
다만 이 부분은 따로 크게 작성할 필요는 없다.
왜냐하면 이전에 이미 이 관련 코드를 작성했기 때문이다.
따라서 View나 Template는 크게 바뀌지 않아도 될 것이다.
다만, Template의 경우에는 일반적인 User와
권한이 있는 User와의 보여지는 것이 달라지기 때문에
파일을 추가해 작성할 필요가 있다.
① View
따라서 각 디폴트 화면(Template)의 View는
위의 화면과 같이
기존에 작성되어 있는 제너릭 View를 참고해 사용하면 될 것 같다.
class ManagementBookListView(generic.ListView):
model = Book
template_name = 'catalog/manage_book_list.html'
paginate_by = 5
class ManagementAuthorListView(generic.ListView):
model = Author
template_name = 'catalog/manage_author_list.html'
paginate_by = 5
따라서 위와 같은 제너릭 View코드를 작성할 수 있다.
단, 이번에는 template_name 필드를 정의할 필요가 있는데
이 필드를 추가하지 않으면 Model명을 기반으로 하여
Django가 자동으로 매칭시켜주기 때문이다.
template_name 필드를 정의하지 않을 경우
위의 두 클래스의 경우는 각각 book_list.html과
author_list.html이 매칭될 것이다.
② Template
우선적으로 추가해야할 Template는
각 기능의 디폴트 페이지 Template이다.
즉, 링크를 누를 경우 나타나며,
추가, 삭제, 수정 했을 경우 리다이렉트될 페이지를
우선적으로 구현해야 한다.
먼저 모든 책의 목록은 아래와 같이
catalog/templates/catalog/ 경로에
{% extends "book_list.html" %}
manage_book_list.html 파일을 생성하고
위와 같은 코드를 추가 한다.
여기서 book_list.html 파일은
이전에 작성했던 모든 책 리스트를 보여주는 Template이다.
동일하게 모든 작가의 목록은 아래와 같이
catalog/templates/catalog/ 경로에
{% extends "book_list.html" %}
manage_author_list.html 파일을 생성하고
위와 같은 코드를 추가 한다.
여기서 author_list.html 파일은
이전에 작성했던 모든 작가 리스트를 보여주는 Template이다.
③ URL
작성한 View를 url에 이어보자.
catalog/ 경로에
# Addmin Management URLS
path('manage-book/', views.ManagementBookListView.as_view(), name='manage-book'),
path('manage-author/', views.ManagementAuthorListView.as_view(), name='manage-author'),
urls.py 파일에 위와 같은 코드를 추가하자.
④ Test
그렇다면 이제
정상적으로 작동하는지 확인해보자.
홈 페이지를 확인해보자.
위의 화면과 같이 의도 한대로
Borrowed Management, Book Management, Author Management
가 표시되는 것을 확인할 수 있으며,
위와 같이 전체 책 리스트와 전체 작가 리스트가
정상적으로 출력되는 것을 확인할 수 있다.
다음은 이 페이지에 추가, 수정, 삭제 기능을 만들면 된다.