Django 快速搭建博客 第十节(修复首页,阅读量的数据)

2023-11-12

写到这里,我们已经使用django博客基础开发框架什么的快开发到底了,接下来的是django进阶阶段,难度会稍微大一些。

这里主要是进行一些遗漏掉的地方的:

1 我们博客的首页的点击事件未实现

2 文章的阅读量未填满

对于第一点:

我们只要把相应的点击事件给填上去就好:
1. 在Snake & Baby 和首页处加上点击事件:

/blog/base.html
<h1><a href="{% url 'blog:index' %}"><b>Snake</b> &amp; 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']

因此可以删掉视图函数中对文章列表中返回结果进行排序的代码了

画圈的可删除的代码.png

接下来是django进阶阶段,进行一些新功能的修修补补操作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 快速搭建博客 第十节(修复首页,阅读量的数据) 的相关文章

随机推荐

  • python:openpyxl基础操作(一):创建.xlsx文件

    目录 前言 安装openpyxl 创建 xlsx文件 添加单元格内容 单个添加 多个添加 增删单元格 遍历表格中的值 合并拆分单元格 前言 本文仅供个人学习记录 复习所用 探索过程中难免出现差错和纰漏 如文中有错误 以及可以改进的地方 还请
  • python中的utils模块_python常用方法utils

    always 目录里主要封装了一些自己常用的方法 1 doc2txt 本函数主要目的是方便在写爬虫的时候遇到word附件 下载后直接提取出文本文件 注意 需要安装antiword mac下 brew install antiword 2 f
  • vue3组件通信方式一

    目录 props 父组件给子组件传递数据 子组件获取父组件传递数据 方式1 子组件获取父组件传递数据 方式2 案例 自定义事件 原生DOM事件 自定义事件 案例 全局事件总线 v model useAttrs 不管是vue2还是vue3 组
  • yolov3测试自己的数据

    yolov3测试自己的数据 前言 上一篇我已经介绍了利用yolov3预训练权重文件 只包含卷积层 并训练 只需要进行如下编译 darknet detector train cfg voc data cfg yolov3 cfg darkne
  • macOS 虚拟桌面黑屏(转)

    转自 macOS重置虚拟桌面 macOS 虚拟桌面黑屏 有几次出现如图的情况 以为是iTerm的问题 但是在关闭软件 重启之后 依旧无效 后面经过网友告知 才知道是虚拟桌面的问题 为了清理这个问题 有以下两种方法 法一 在终端输入以下命令
  • VC++闪退的两种解决方式(1然后选择“开始执行(不调试)“,也就是ctrl+F5;2system(“pause“);)

    这几天将开发集成环境换成了vs2010 刚开始用 有些地方不是很懂 通过查阅相关文档 现得以解决 就拿VS2010 调试窗口一闪而过解决方法如下 cpp view plain copy include
  • DAY2:leetcode977有序数组的平方 209 长度最小的子数组 59螺旋矩阵

    一 双指针法 O n 时间复杂度 有序数组的平方 一维数组初始化 vector
  • RTP时间戳概念

    RTP协议不依赖于底层协议 由于UDP包的快速 时实性高的特点 它通常和UDP结合在一起 作为UDP的上层载体数据的形式传播 typedef struct rtp header t uint32 t v 2 protocol version
  • Python基础(3)——PyCharm介绍

    Python基础 3 PyCharm介绍 文章目录 Python基础 3 PyCharm介绍 课程目标 一 PyCharm的作用 二 下载和安装 2 1 下载 2 2 安装 三 PyCharm基本使用 3 1 新建项目 3 2 新建文件并书
  • Qt::UserRole的作用

    Qt UserRole相当于一个索引的作用 对于一些Qt的组件有一个参数位置就需要Qt UserRole void QComboBox setItemData int index const QVariant value int role
  • 设计模式笔记1--单例模式

    设计模式笔记1 单例模式 1 单例模式介绍 Head First设计模式中解释 用来创建独一无二的 只能有一个实例的对象的入场券 即 该类只能有一个示例 其实现逻辑一般是 构造函数声明为private或protect防止被外部函数实例化 内
  • 数据学习(十四)-方差分析与试验设计

    1 方差分析引论 2 单因素方差分析 3 方差分析中的多重比较 4 双因素方差分析 5 试验设计初步 1 方差分析引论 方差分析是比较多个总体的均值是否相等 但本质上它所研究的是变量之间的关系 1 1 方差分析及其有关术语 检验多个总体均值
  • 离线图书推荐,使用sparkMLlib ALS协同过滤算法

    图书推荐 使用sparkMLlib ALS协同过滤算法 bookcrossing数据集 Scala语言 虚拟机ieda平台 代码参照HADOOP大数据实战权威指南第十一章 只能说算是能运行出结果了吧 package com csu impo
  • openGauss学习笔记-53 openGauss 高级特性-Ustore

    文章目录 openGauss学习笔记 53 openGauss 高级特性 Ustore 53 1 设计原理 53 2 核心优势 53 3 使用指导 openGauss学习笔记 53 openGauss 高级特性 Ustore Ustore
  • 2021-01-26Taming Transformers for High-Resolution Image Synthesis(arXiv2020)(有代码)

    转自 https blog csdn net amusi1994 article details 112301258 代码链接 https github com CompVis taming transformers 项目主页 https
  • C++中一个类成员函数调用另一个类成员的方法

    在继承之外 在C 中一个类成员函数调用另一个类成员的方法主要有 类的组合 友元类 类的前向声明 单例模式等 下面主要讲讲这4种方法的实现 方法1 利用类的组合 组合通俗来讲就是类B有类A的属性 如声明一个Person类 再声明一个Teach
  • 【前端面试题之Vue篇】(1)父子组件通信方式Props/$emit

    文章目录 前言 一 父组件向子组件传值 1 Props定义 2 Props 用法 1 路由里注册父子组件 2 父组件里引入子组件 并且注册子组件 3 子组件利用props接受父组件传过来的值 4 展示 二 子组件向父组件传值 1 emit
  • SegGPT_分割上下文中的所有内容

    文章目录 摘要 2 相关工作 2 1 视觉分割 2 2 视觉通才 2 3 上下文视觉学习 3 方法 3 1 上下文着色 3 2 上下文组合 3 3 在上下文中调优 4 实验 4 1 数据集 4 2 一阶段训练细节 4 3 定性结果 4 4
  • 30--子类对象的实例化过程

    在继承的操作中 对于子类的实例化也是有要求的 即子类对象在实例化之前必须首先调用父类中的构造方法 然后再调用子类自己的构造方法 实例1 定义父类 package com qwy bean public class Person privat
  • Django 快速搭建博客 第十节(修复首页,阅读量的数据)

    写到这里 我们已经使用django博客基础开发框架什么的快开发到底了 接下来的是django进阶阶段 难度会稍微大一些 这里主要是进行一些遗漏掉的地方的 1 我们博客的首页的点击事件未实现 2 文章的阅读量未填满 对于第一点 我们只要把相应