Django 快速搭建博客 第十节(修复首页,阅读量的数据)
2017-11-27 22:43
507 查看
写到这里,我们已经使用django博客基础开发框架什么的快开发到底了,接下来的是django进阶阶段,难度会稍微大一些。
这里主要是进行一些遗漏掉的地方的:1 我们博客的首页的点击事件未实现
2 文章的阅读量未填满
对于第一点:
我们只要把相应的点击事件给填上去就好:1. 在Snake & Baby 和首页处加上点击事件:
/blog/base.html
<h1><a href="{% url 'blog:index' %}"><b>Snake</b> & Baby</a></h1>
<li class="cl-effect-11"><a href="{% url 'blog:index' %}" data-hover="首页">首页</a></li>
2 . 在评论书加入统计数据:
因为文章内容都是最新的文章显示在最前面,所以我们有按照时间进行文章的获取,使用的语法是
Post.objects.all().order_by('-created_time'),这就导致了许多重复,所以我们干脆在Post模型中,制定Post的自然排序方式,这类似于java中实现了comparable接口,我们需要做的只是在Post内部定义一个内部类Meta类,并指定排序属性。
from django.db import models from django.contrib.auth.models import User from django.urls import reverse from django.utils.six import python_2_unicode_compatible # python_2_unicode_compatible 装饰器用于兼容 Python2 @python_2_unicode_compatible class Category(models.Model): """ Django 要求模型必须继承 models.Model 类。 Category 只需要一个简单的分类名 name 就可以了。 CharField 指定了分类名 name 的数据类型,CharField 是字符型, CharField 的 max_length 参数指定其最大长度,超过这个长度的分类名就不能被存入数据库。 当然 Django 还为我们提供了多种其它的数据类型,如日期时间类型 DateTimeField、整数类型 IntegerField 等等。 Django 内置的全部类型可查看文档: https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types """ name = models.CharField(max_length=100) def __str__(self): return self.name @python_2_unicode_compatible class Tag(models.Model): """ 标签 Tag 也比较简单,和 Category 一样。 再次强调一定要继承 models.Model 类! """ name = models.CharField(max_length=100) def __str__(self): return self.name @python_2_unicode_compatible class Post(models.Model): """ 文章的数据库表稍微复杂一点,主要是涉及的字段更多。 """ # 文章标题 title = models.CharField(max_length=70) # 文章正文,我们使用了 TextField。 # 存储比较短的字符串可以使用 CharField,但对于文章的正文来说可能会是一大段文本,因此使用 TextField 来存储大段文本。 body = models.TextField() # 这两个列分别表示文章的创建时间和最后一次修改时间,存储时间的字段用 DateTimeField 类型。 created_time = models.DateTimeField() modified_time = models.DateTimeField() # 文章摘要,可以没有文章摘要,但默认情况下 CharField 要求我们必须存入数据,否则就会报错。 # 指定 CharField 的 blank=True 参数值后就可以允许空值了。 excerpt = models.CharField(max_length=200, blank=True) # 这是分类与标签,分类与标签的模型我们已经定义在上面。 # 我们在这里把文章对应的数据库表和分类、标签对应的数据库表关联了起来,但是关联形式稍微有点不同。 # 我们规定一篇文章只能对应一个分类,但是一个分类下可以有多篇文章,所以我们使用的是 ForeignKey,即一对多的关联关系。 # 而对于标签来说,一篇文章可以有多个标签,同一个标签下也可能有多篇文章,所以我们使用 ManyToManyField,表明这是多对多的关联关系。 # 同时我们规定文章可以没有标签,因此为标签 tags 指定了 blank=True。 # 如果你对 ForeignKey、ManyToManyField 不了解,请看教程中的解释,亦可参考官方文档: # https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships category = models.ForeignKey(Category) tags = models.ManyToManyField(Tag, blank=True) # 文章作者,这里 User 是从 django.contrib.auth.models 导入的。 # django.contrib.auth 是 Django 内置的应用,专门用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。 # 这里我们通过 ForeignKey 把文章和 User 关联了起来。 # 因为我们规定一篇文章只能有一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似。 author = models.ForeignKey(User) def __str__(self): return self.title # 自定义 get_absolute_url 方法 # 记得从 django.urls 中导入 reverse 函数 def get_absolute_url(self): return reverse('blog:detail', kwargs={'pk': self.pk}) class Meta: # ordering 用来指定文章排序, ordering = ['-created_time']
上面主要是添加了:
class Meta: # ordering 用来指定文章排序, ordering = ['-created_time']
因此可以删掉视图函数中对文章列表中返回结果进行排序的代码了
接下来是django进阶阶段,进行一些新功能的修修补补操作
相关文章推荐
- Django 快速搭建博客 第十一节(文章阅读量统计,自动生成文章摘要)
- Django 快速搭建博客 第十一节(文章阅读量统计,自动生成文章摘要)
- #小练习 使用正则抓取oschina博客专区首页数据 分类: python 小练习 正则表达式 2013-11-11 17:22 604人阅读 评论(0) 收藏
- Django:快速搭建简单的Blog 分类: 软件插件学习 2015-06-10 18:07 35人阅读 评论(0) 收藏
- Django 快速搭建个人博客(终结版)
- Django 快速搭建博客 第九节(评论功能的实现)
- Django+python+eclipse 快速搭建博客blog
- Django 快速搭建博客 第六节
- django1.6 博客的快速搭建first blog
- 利用ASP.NET MVC和Bootstrap快速搭建个人博客之后台dataTable数据列表
- Django 快速搭建博客 第四节(hello world视图)
- 我的博客网站开发3——博客首页功能实现之各排行版(阅读数,评论数,推荐数)的数据绑定
- django搭建个人博客03,编写首页
- 使用Django快速搭建简单的数据管理后台
- Django 快速搭建博客 第五节(hello world模板视图)
- Django+python+eclipse 快速搭建博客blog .
- django1.6 博客的快速搭建second blog v2
- django1.8.3搭建博客——2 django web 开发指南阅读笔记
- 使用Django快速搭建简易博客
- Django+python+eclipse 快速搭建博客blog