Django搭建个人博客:编写删除文章功能
2018-10-08 19:43
399 查看
既然有了写文章的功能,那当然也必须要有删除文章的功能了。
编写基本功能
有了之前的学习做铺垫,删除文章实现起来就比较简单了。
首先增加一个视图函数:
article/views.py ... # 删文章 def article_delete(request, id): # 根据 id 获取需要删除的文章 article = ArticlePost.objects.get(id=id) # 调用.delete()方法删除文章 article.delete() # 完成删除后返回文章列表 return redirect("article:article_list")[/code]
- 与查询文章类似,因为需要知道具体应该删除哪一篇文章,因此必须传入文章的
id
; - 紧接着调用
.delete()
函数删除数据库中这篇文章的条目; - 删除成功后返回到文章列表。
这里与上一章一样,不对用户的身份进行限制,即任何人都可以删除任意文章。当然这样肯定是不符合常理的,等到我们学习了用户管理的知识后,再回头来修改。
然后写入路由信息:
article/urls.py ... urlpatterns = [ ... # 删除文章 path('article-delete/<int:id>/', views.article_delete, name='article_delete'), ][/code]
这里几乎与文章详情的写法一样,没有新的内容。再次注意文章的id是如何传递到视图中的。
最后我们希望能够在文章详情的页面进行删除的操作(当然也可以在专门的管理文章的页面中),因此修改模板
detail.html:
templates/article/detail.html ... <!-- 文章详情 --> <div class="container"> <div class="row"> ... <div class="col-12 alert alert-success">作者:{{ article.author }} · <a href="{% url "article:article_delete" article.id %}">删除文章</a> </div> ... </div> </div> ...[/code]
这里增加了一个调用
article_delete视图函数的链接,并且将
article.id传递进去。
运行开发服务器,可以发现已经能够正常的删除文章了:
增加弹窗
功能已经实现了,但是还有个小问题没有解决:万一我只是不小心点到了链接,辛辛苦苦写的文章就被删除了,岂不是欲哭无泪了?
很容易想到的一个解决方法,就是点击删除按钮是出现一个弹窗,确认后再进行删除,确保用户不是误操作的。
弹窗是很常用的功能,但是想写出一个美观好用的弹窗却不容易。幸运的是我们不需要重复造轮子,早就有革命先驱做好相关的功能了,这里我们选择使用Layer弹窗组件。
layer是一款备受青睐的web弹层组件,具备全方位的解决方案。首先到官网下载Layer插件:Layer
解压后将里面的**layer文件夹(含有layer.js的)**直接复制到项目的
static文件夹下。
为了未来在所有页面都能使用Layer弹窗功能,在
base.html中通过标签引入:
templates/base.html ... <body> ... <!-- bootstrap.js 依赖 jquery.js 和popper.js,因此在这里引入 --> <script src="{% static 'jquery/jquery-3.3.1.js' %}"></script> ... <!-- 引入layer.js --> <script src="{% static 'layer/layer.js' %}"></script> </body> ...[/code]
layer插件依赖jquery才能正常工作,因此要在jquery的后面引入layer。
再次改写模板文件
detail.html:
templates/article/detail.html ... <!-- 文章详情 --> <div class="container"> <div class="row"> ... <div class="col-12 alert alert-success">作者:{{ article.author }} · <a href="#" onclick="confirm_delete()">删除文章</a> </div> ... </div> </div> <script> // 删除文章的函数 function confirm_delete() { // 调用layer弹窗组件 layer.open({ // 弹窗标题 title: "确认删除", // 正文 content: "确认删除这篇文章吗?", // 点击确定按钮后调用的回调函数 yes: function(index, layero) { // 指定应当前往的 url location.href='{% url "article:article_delete" article.id %}' }, }) } </script> {% endblock content %}[/code]
这里将
href链接去除掉,增加了
onclick属性,表示在点击链接的时候调用后面的
confirm_delete()函数;函数中调用了layer弹窗组件,对弹窗的标题、正文以及点击确定键的行为作出了规定(当然Layer组件远不止这些用法,具体可在官方文档中查阅)。
location.href定义了点击确定键后应该前往的地址,即删除文章的url。
保存所有文件后刷新页面,很好,达到了理想的效果:
总结
本章新增了删除博客文章的功能,并且使用了弹窗组件优化了用户体验。
下一章将学习如何更新文章,准备好继续作战吧。
- 有疑问请在杜赛的个人网站留言,我会尽快回复。
- 或Email私信我:dusaiphoto@foxmail.com
- 项目完整代码:Django_blog_tutorial
阅读更多转载请告知作者并注明出处。
相关文章推荐
- Django搭建个人博客:完成修改文章功能
- django搭建个人博客10,文章详细3-评论
- django搭建个人博客09,文章详细2-评论
- django搭建个人博客04,文章列表
- django搭建个人博客03,编写首页
- django搭建个人博客05,文章详细页1
- 利用ASP.NET MVC和Bootstrap快速搭建个人博客之文章打赏功能(六)
- django搭建个人博客07,编辑文章
- 利用ASP.NET MVC和Bootstrap快速搭建个人博客之文章打赏功能(六)
- Django搭建个人博客:用户的删除
- Django搭建个人博客
- Django开发个人博客网站——21、实现博客的统计功能
- VirtualBox虚拟机ubuntu系统安装及django搭建个人博客
- django搭建个人博客02,表设计(models)
- Django搭建个人博客:用户的注册
- Django搭建个人博客:重置用户密码
- 环境搭建基础知识1(CSDN博客频道推出文章目录功能)
- Django 快速搭建博客 第九节(评论功能的实现)
- django搭建个人博客遇到的常见问题
- 用django在SAE搭建个人博客(一)