Django blog项目《十七》:后台admin《热门文章功能实现》

本文详细介绍了在Django项目中实现热门文章功能的全过程,包括热门文章的展示、删除、修改和添加功能的实现。通过分析业务流程,配置urls,编写views视图逻辑,前端js处理以及html页面填充,实现了对热门文章的CRUD操作。
摘要由CSDN通过智能技术生成

热门文章功能,实现热门文章的增、删、改、查功能的实现

一、分析

1. 业务流程

1.热门文章展示
  1. 业务流程

    • 从数据库中获取到数据然后传递给前端
    • 前端填充到页面中
  2. 请求方式、地址、参数

    • 请求方式:GET
    • 请求地址:/admin/hot_article/
    • 请求参数:无
2. 热门文章删除功能
  1. 业务流程

    • 从前端传递一个带有热门文章id的delete请求
    • 判断数据库中是否有该数据
    • 逻辑删除该热门文章,并返回数据到前端
  2. 请求方式、地址、参数

    1. 请求方式:DELETE

    2. 请求地址:/admin/hot_article/<int:hot_article_id>/

    3. 请求参数:

      参数名 类型 是否必传 备注
      hot_article_id int 必传 路径参数
3. 热门文章修改功能
  1. 业务流程

    • 判断priority文章优先级是否和以前的一样
    • 判断priority是否在优先级规定的表内
    • 接收前端传来的数据
    • 判断该篇热门文章是否存在
    • 对热门文章的优先级进行修改
    • 返回数据到前端
  2. 请求方式、地址、参数

    1. 请求方式:PUT

    2. 请求地址:/admin/hot_article/<int:hot_article_id>/

    3. 请求参数:

      参数名 类型 是否必传 备注
      hot_article_id int 必传 路径参数
      priority int 必传 请求体里
  3. 前端功能实

    • 获取到优先级priority的值
    • 判断priority文章优先级是否和以前的一样
    • 判断priority是否在优先级规定的表内
    • 发起ajax PUT请求
      • 修改该条热门文章的信息
  4. 后端逻辑处理

    • 接收前端传来的数据
    • 判断该篇热门文章是否存在
    • 判断priority文章优先级是否和以前的一样
    • 判断priority是否在优先级规定的表内
    • 对该篇热门文章的优先级进行修改
    • 返回数据到前端
4. 热门文章添加功能
  1. 业务流程

    • 发送文章类型、热门文章优先级到前端
    • 构造点击文章类型时出现对应的所有该类型的文章
    • 判断该篇文章是否存在
    • 判断优先级是否满足要求
    • 判断优先级是否在优先级列表中
    • 创建新的热门文章
    • 返回数据到前端
  2. 请求方式、地址、参数

    1. 请求方式:POST

    2. 请求地址:/admin/hot_add/

    3. 请求参数:

      参数名 类型 是否必传 备注
      article_id int 必传 请求体里
      priority int 必传 请求体里
  3. 前端处理

    • 获取到文章id和热门文章优先级
    • 发送ajax POST请求
      • 跳转到热门文章列表页
  4. 后端逻辑

    • 构造文章类型、热门文章优先级到后端
    • 获取到前端传来的数据
    • 判断文章是否存在
    • 判断文章优先级是否满足要求
    • 判断热门文章优先级是否在优先级列表中
    • 创建热门文章
    • 返回数据到前端

二、热门文章展示、删除、修改功能实现

1. urls配置
from django.urls import path

from admin import views

app_name = "admin"

urlpatterns = [
   
    path("hot_article/", views.HotArticleView.as_view(), name="hot_article"),
    path("hot_article/<int:hot_article_id>/", views.HotArticleView.as_view(), name="hot_article_change"),
   
]
2. views视图逻辑处理
import json

from django.views import View
from django.shortcuts import render
from django.contrib.auth.mixins import PermissionRequiredMixin

from news import models
from utils.res_code.res_code import Code, error_map
from utils.res_code.json_function import to_json_data


# 热门文章删改查
class HotArticleView(PermissionRequiredMixin, View):
    """
    hot article add/view/delete/edit function view
    route:/admin/hot_article/  :view
    route:/admin/hot_article/<int:article_id>/  :delete and edit
    permissions:view_hotarticle/change_hotarticle/delete_hotarticle
    """
    # 设置权限
    permission_required = ("news.view_hotarticle", "news.change_hotarticle", "news.delete_hotarticle")
    raise_exception = True

    
    def get(self, request):
        """
        hot article view
        :param request:
        :return:
        """
        hot_articles = models.HotArticle.objects.only("id", "priority", "article__title",
                                                      "article__tag__name").filter(is_delete=False).order_by("priority")
        return render(request, 'admin/news/hot_article.html', locals())

    
    def put(self, request, hot_article_id):
        """
        hot article priority change
        :param request:
        :return:
        """
        # 获取亲阿杜那传来的数据
        try:
            json_data = request.body
            if not json_data:
                return to_json_data(errno=Code.PARAMERR, errmsg="参数错误")
            dict_data = json.loads(json_data)
        except Exception as e:
            return to_json_data(errno=Code.UNKOWNERR, errmsg="未知错误")
        
        # 获取到优先级
        try:
            priority = int(dict_data.get("priority"))
            if priority not in [num for num, word in models.HotArticle.PRI_CHOICES]:  # 判断输入的优先级是否在优先级表中
                return to_json_data(errno=Code.UNKOWNERR, errmsg="设置的优先级不在优先级表中")

        except Exception as e:
            logger.info("热门文章优秀级异常:{}".format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg="热门文章优秀级设置错误")
        
        # 判断文章是否存在
        hot_article = models.HotArticle.objects.only("id").filter(id=hot_article_id).first()
        if not hot_article:
            return to_json_data(errno=Code.PARAMERR, errmsg="该热门文章不存在")
        
        # 判断优先级是否有修改
        if hot_article.priority == priority:
            return to_json_data(errno=Code.PARAMERR, errmsg="优先级未修改")
        
        # 保存
        hot_article.priority = priority
        hot_article.save(update_fields=["priority"])
        return to_json_data(errmsg="优先级修改成功")

    
    def delete(self, request, hot_article_id):
        """
        hot article delete
        :param request:
        :return:
        """
        hot_article = models.HotArticle.objects.only("id").filter(is_delete=False, id=hot_article_id).first()

        if hot_article:
            hot_article.is_delete = True
            hot_article.save()
            return to_json_data(errmsg="热门文章删除成功")
        else:
            return to_json_data(errno=Code.PARAMERR, errmsg="参数错误")
3. js前端逻辑实现

js里面使用到了两个js插件 fsweetalert.jsmessage.js

$(function () {
     //增删改查
    let $editBtn = $(".btn-edit");
    let $delBtn = $(".btn-del");

    //热门文章删除
    $delBtn.click(function () {
   
        let _this = this;
        let sHotArticleId = $(this).parents("tr").data("id");
        let sHotArticleName = $(this).parents("tr").data("name");
        fAlert.alertConfirm({
     //弹窗
           title:"确定删除" + sHotArticleName + "热门文章吗?",
            type:"error",
            confirmButtonText:"确认删除",
            cancelButtonText:"取消",
            confirmCallback:function confirmCallback() {
   
                $.ajax({
   
                    url:"/admin/hot_article/" + sHotArticleId +"/",
                    type:"DELETE",
                    dataType
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值