讀者管理

讀者管理的應用程式在建立專案時也已經建立完畢,直接撰寫應用程式的內容就好。

定義讀者資料模型

開啟 library/reader/models.py,新增以下程式碼:

# 讀者資料 class Reader(Model): realname = CharField('姓名', max_length=32) tel = CharField('聯絡電話', max_length=255) email = EmailField('電子信箱') def __str__(self): return "{} / {} / {}".format( self.realname, self.email, self.tel )

執行以下指令以套用至資料庫

python manage.py makemigrations python manage.py migrate

重新啟動網站服務

python manage.py runserver 0.0.0.0:80

新增讀者管理路徑規則

開啟檔案 library/reader/urls.py ,修改為以下程式碼:

from django.urls import path from .views import * urlpatterns = [ path('', ReaderList.as_view(), name='reader_list'), path('add/', ReaderAdd.as_view(), name='reader_add'), path('<int:pk>/', ReaderView.as_view(), name='reader_view'), path('<int:pk>/edit/', ReaderEdit.as_view(), name='reader_edit'), path('<int:pk>/delete/', ReaderDelete.as_view(), name='reader_delete'), ]

修改專案路徑檔 library/library/urls.py,加入第 27 行

urlpatterns = [ path('admin/', admin.site.urls), path('user/', include('django.contrib.auth.urls')), path('', RedirectView.as_view(url='book/')), path('book/', include('book.urls')), path('reader/', include('reader.urls')), ]

新增讀者管理處理視圖

開啟 library/reader/views.py,修改為以下內容:

from django.urls import reverse_lazy from django.views.generic import * from django.contrib.auth.mixins import LoginRequiredMixin from .models import * # Create your views here. class ReaderList(LoginRequiredMixin, ListView): # 讀者列表 model = Reader ordering = ['realname'] # 依姓名排序 paginate_by = 20 class ReaderView(LoginRequiredMixin, DetailView): # 檢視讀者 model = Reader class ReaderAdd(LoginRequiredMixin, CreateView): # 新增讀者 model = Reader fields = '__all__' template_name = 'form.html' success_url = reverse_lazy('reader_list') class ReaderEdit(LoginRequiredMixin, UpdateView): # 編輯讀者 model = Reader fields = '__all__' template_name = 'form.html' success_url = reverse_lazy('reader_list') class ReaderDelete(LoginRequiredMixin, DeleteView): # 刪除讀者 model = Reader template_name = 'confirm_delete.html' success_url = reverse_lazy('reader_list')

建立讀者管理相關頁面範本

新增導覽列連結

開啟導覽列頁面範本檔案 library/templates/navbar.html,新增第 18 - 22 行增加讀者管理連結:

{% if user.is_authenticated %} <li class="nav-item"> <a href="{% url 'book_list' %}" class="nav-link"> <i class="fas fa-book"></i> 圖書列表 </a> </li> <li class="nav-item"> <a href="{% url 'reader_list' %}" class="nav-link"> <i class="fas fa-book-reader"></i> 讀者列表 </a> </li> <li class="nav-item"> <a href="{% url 'logout' %}" class="nav-link"> <i class="fas fa-sign-out-alt"></i> 登出 {{ user.username }} </a> </li> {% else %}

讀者列表

建立 library/templates/reader 資料夾,然後再新增讀者列表頁面範本檔案 library/templates/reader/reader_list.html

{% extends "base.html" %} {% block content %} <div class="mb-1"> <a href="{% url 'reader_add' %}" class="btn btn-sm btn-primary"> <i class="fas fa-plus"></i> 新增讀者 </a> </div> <div id="reader-list"> <table class="table table-sm"> <thead> <tr> <th>姓名</th><th>電話</th><th>電子信箱</th><th>操作</th> </tr> </thead> <tbody> {% for reader in reader_list %} <tr> <td> <a href="{% url 'reader_view' reader.id %}">{{ reader.realname }}</a> </td> <td>{{ reader.tel }}</td> <td>{{ reader.email }}</td> <td> <a href="{% url 'reader_delete' reader.id %}" class="btn btn-sm btn-danger">刪除</a> <a href="{% url 'reader_edit' reader.id %}" class="btn btn-sm btn-primary">修改</a> </td> </tr> {% endfor %} </tbody> </table> </div> {% include "pagination.html" %} {% endblock %}

檢視讀者

新增檢視讀者頁面範本檔案 book/temapltes/web/reader_detail.html

{% extends "base.html" %} {% block content %} <div id="reader-detail"> <div class="row"> <div class="col-md-4"> <div class="card"> <div class="card-header"> {{ reader.realname }} </div> <table class="table table-sm"> <tr> <th>電話</th> <td>{{ reader.tel }}</td> </tr> <tr> <th>電子信箱</th> <td>{{ reader.email }}</td> </tr> </table> </div> </div> <div class="col-md-8"> </div> </div> </div> {% endblock %}

仿照圖書檢視的頁面範本,將頁面分成左右兩塊,分別佔用 1/3 與 2/3 的寬度,將讀者的基本資料以卡片形式顯示在左邊,右邊保留給之後顯示讀者的借閱紀錄時使用。

新增讀者、編輯讀者、刪除讀者

新增讀者與編輯讀者的頁面範本直接共用 form.html,而刪除讀者則共用 confirm_delete.html 即可,不需另外準備。