热门文章功能,实现热门文章的增、删、改、查功能的实现
一、分析
1. 业务流程
1.热门文章展示
-
业务流程
- 从数据库中获取到数据然后传递给前端
- 前端填充到页面中
-
请求方式、地址、参数
- 请求方式:GET
- 请求地址:/admin/hot_article/
- 请求参数:无
2. 热门文章删除功能
-
业务流程
- 从前端传递一个带有热门文章id的delete请求
- 判断数据库中是否有该数据
- 逻辑删除该热门文章,并返回数据到前端
-
请求方式、地址、参数
-
请求方式:DELETE
-
请求地址:/admin/hot_article/<int:hot_article_id>/
-
请求参数:
参数名 类型 是否必传 备注 hot_article_id int 必传 路径参数
-
3. 热门文章修改功能
-
业务流程
- 判断priority文章优先级是否和以前的一样
- 判断priority是否在优先级规定的表内
- 接收前端传来的数据
- 判断该篇热门文章是否存在
- 对热门文章的优先级进行修改
- 返回数据到前端
-
请求方式、地址、参数
-
请求方式:PUT
-
请求地址:/admin/hot_article/<int:hot_article_id>/
-
请求参数:
参数名 类型 是否必传 备注 hot_article_id int 必传 路径参数 priority int 必传 请求体里
-
-
前端功能实
- 获取到优先级priority的值
- 判断priority文章优先级是否和以前的一样
- 判断priority是否在优先级规定的表内
- 发起ajax PUT请求
- 修改该条热门文章的信息
-
后端逻辑处理
- 接收前端传来的数据
- 判断该篇热门文章是否存在
- 判断priority文章优先级是否和以前的一样
- 判断priority是否在优先级规定的表内
- 对该篇热门文章的优先级进行修改
- 返回数据到前端
4. 热门文章添加功能
-
业务流程
- 发送文章类型、热门文章优先级到前端
- 构造点击文章类型时出现对应的所有该类型的文章
- 判断该篇文章是否存在
- 判断优先级是否满足要求
- 判断优先级是否在优先级列表中
- 创建新的热门文章
- 返回数据到前端
-
请求方式、地址、参数
-
请求方式:POST
-
请求地址:/admin/hot_add/
-
请求参数:
参数名 类型 是否必传 备注 article_id int 必传 请求体里 priority int 必传 请求体里
-
-
前端处理
- 获取到文章id和热门文章优先级
- 发送ajax POST请求
- 跳转到热门文章列表页
-
后端逻辑
- 构造文章类型、热门文章优先级到后端
- 获取到前端传来的数据
- 判断文章是否存在
- 判断文章优先级是否满足要求
- 判断热门文章优先级是否在优先级列表中
- 创建热门文章
- 返回数据到前端
二、热门文章展示、删除、修改功能实现
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.js 和 message.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