当前位置: 首页 > 后端技术 > Python

HelloDjangoPart15-优化博客功能细节,提升用户体验

时间:2023-03-25 22:09:04 Python

作者:HelloGitHub-文中涉及的示例代码已更新至HelloGitHub-团队仓库。在之前的系列教程中,我们已经实现了:对于文章的发布、展示、评论等功能,认真的朋友可能已经发现,其中有些功能设计的不是很好。今天我们将优化一些体验和操作细节。让我们的博客更完美,更易用~在模型中指定排序为了让文章(Posts)按照发布时间倒序排列,让最新发布的文章排在文章列表的最前面,我们对返回的文章列表进行了排序,即每个视图函数中都有类似Post.objects.all().order_by('-created_time')这样的代码,导致大量重复。因为只要返回的文章列表基本上是倒序排列的,在Post模型中就可以指定Post的自然排序方式。Django允许我们在models.Model的子类中定义一个名为Meta的内部类,通过它指定一些属性的值来指定模型类的一些特性。比如这里我们要指定Post的排序方式。先看Post的代码。在Post模型中定义的Meta类中,指定排序属性顺序:blog/models.pyclassPost(models.Model):...created_time=models.DateTimeField()...classMeta:verbose_name='article'verbose_name_plural=verbose_nameordering=['-created_time']ordering属性用于指定文章排序方式,['-created_time']指定根据哪个属性值排序,这里指定按文章发布时间排序,负号表示倒序。list中可以有多个item,比如ordering=['-created_time','title']表示先按照created_time排序,如果created_time相同,则按照title排序。这样指定后,所有返回的文章列表都会自动按照Meta中指定的顺序进行排序,所以视图函数中文章列表中对返回结果进行排序的代码可以去掉。评论模型类(Comment)也可以添加这个属性。改进跳转链接在导航栏中有一个黑白Logo,我们希望点击它返回首页,只需修改超链接即可。打开base.html,修改Logo处的超链接:

黑白&White

...
此外,导航栏还有一个首页导航按钮,也希望点击可以返回首页,修改任务作为练习交给大家(有两个地方,一个是桌面导航,一个是手机导航)。当然,还有一些跳跃可以改进。比如文章标题下,有分类、发布时间、作者、评论量、阅读量等信息。可以点击分类跳转到分类页面;点击阅读量跳转文章详情页等,这些细节不涉及新知识,留给大家作为练习。显示正确的评论量显示评论量的地方有两个(首页文章列表和文章详情页),显示评论量的方法很简单。还记得我们是如何获取文章下的评论列表的吗?我们正在使用post.comment_set.all()。all方法返回与这篇文章相关的评论列表。另外modelmanager(comment_set是一个特殊的modelmanager)还有一个count方法,返回数量,即帖子下有多少条评论。我们可以直接在模板中调用这个方法:{{post.comment_set.count}}。用此模板变量替换评论数,以正确显示文章的评论数。跳转到评论区有时候文章内容很长,评论列表的内容需要滚动很长的一页才能看到。我们可以在评论区添加一个锚点,显示评论量的两个地方的超链接都指向这个锚点,这样点击这两个地方就会直接跳转到评论列表区,方便用户快速查看评论内容。查看显示评论的模板代码:

发表评论

...我们已经给出了评论area标签设置了一个id,在评论链接后面加上这个id的锚点即可:blog/index.html...{{post.comment_set.count}}评论588阅读
blog/detail.html{{post.title}}...{{post.comment_set.count}}条评论588阅读
注意这里需要从index.html跳转到评论区的页面,所以href超链接指定为绝对URL,文章详情和评论区在同一页,所以只需要锚点s待指定。结束了吗?通过一个博客实战项目,我们了解了django的基本开发技术。包括如何编写模型(Model)、如何编写视图函数(View)、如何使用django内置的模板系统(Template)以及如何配置路由(URL)。这四个模块是django开发的核心。现在我们可以基本学会如何使用这些模块了。但是,这还不是全部……Django提供的不止于此,我们的博客不止于此。如何对博客文章进行分页?如何为博客提供RSS订阅服务?如何实现文章搜索?如果网站需要提供用户系统,如何实现用户的注册登录呢?如何部署到服务器上供他人通过公网访问?这些需求可以通过使用django内置的模块或者丰富的第三方应用来实现。此外,django还有大量的第三方应用提供更丰富的功能。例如,当有人评论我的文章时,我如何收到通知?网站需要提供新浪微博、微信等社交账号登录等,借助django第三方应用可以快速完成,我们只需要自己编写少量代码即可。那么,让我们再接再厉,进入进阶篇,继续学习更多的django开发技巧,为博客提供更多的功能吧!《讲解开源项目系列》——让对开源项目感兴趣的人不再害怕,让开源项目的发起者不再孤单。关注我们的文章,您将发现编程的乐趣,使用并发现参与开源项目是多么容易。欢迎留言联系我们,加入我们,让更多人爱上开源,为开源做贡献~