基於django的視訊點播網站開發-step10-後臺評論管理功能

net936發表於2019-02-19

本講中,我們會講到評論管理功能,資料庫中的每一條是來自使用者的評價,因此後臺中的評論管理只有評論列表和評論刪除功能,沒有增加評論和編輯評論。

照例我們先新增評論管理的相關路由

path(`comment_list/`, views.CommentListView.as_view(), name=`comment_list`),
path(`comment_delete/`, views.comment_delete, name=`comment_delete`),

首先是評論列表的展示,我們通過CommentListView檢視類來實現,該類依然是繼承ListView來實現的。程式碼如下

class CommentListView(AdminUserRequiredMixin, generic.ListView):
    model = Comment
    template_name = `myadmin/comment_list.html`
    context_object_name = `comment_list`
    paginate_by = 10
    q = ``

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super(CommentListView, self).get_context_data(**kwargs)
        paginator = context.get(`paginator`)
        page = context.get(`page_obj`)
        page_list = get_page_list(paginator, page)
        context[`page_list`] = page_list
        context[`q`] = self.q
        return context

    def get_queryset(self):
        self.q = self.request.GET.get("q", "")
        return Comment.objects.filter(content__contains=self.q).order_by(`-timestamp`)

通過繼承ListView來實現評論列表的展示,通過get_context_data()來實現分頁功能,通過get_queryset()來實現搜尋功能。

效果如下

下面我們繼續實現刪除功能,該功能比較簡單,只需要通過ajax將video_id傳給刪除介面即可,ajax的程式碼位於static/js/myadmin/comment_list.js,刪除評論的介面是api_comment_delete,最終會呼叫到comment_delete,程式碼如下

@ajax_required
@require_http_methods(["POST"])
def comment_delete(request): 
    comment_id = request.POST[`comment_id`]
    instance = Comment.objects.get(id=comment_id)
    instance.delete()
    return JsonResponse({"code": 0, "msg": "success"})

邏輯還算清晰,即先拿到評論的id,然後獲取到該條評論,最後instance.delete()刪除之。


相關文章