跳至主要內容
02-用户账户

摘要

Web 应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方。在本章中,我们将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目。我们还将学习 Django 如何防范对基于表单的页面发起的常见攻击,从而无须花太多时间考虑确保应用程序安全的问题。

你好,我是悦创。

然后,我们将实现一个用户身份验证系统。首先创建一个注册页面,供用户创建账户,并让有些页面只能供已登录的用户访问。接下来,修改一些视图函数,使得用户只能看到自己的数据。我们还将学习如何确保用户数据的安全。


AI悦创原创...大约 27 分钟django体系课django体系课
03-如何编写自定义的模板标签和过滤器

你好,我是悦创。

Django 模板语言包含了很多 内置 tags 和 filters,设计目的是满足应用需要占位逻辑需求。极少情况下,你可能发现需要的功能未被核心模板集覆盖。你能通过 Python 代码自定义 tags 和 filters 扩展集成模板引擎,通过 {% load %} 标签使其可用。


AI悦创原创...大约 4 分钟django体系课django体系课
15-优化博客功能细节,提升使用体验

1. 在模型中指定排序

为了让文章(Post)按发布时间逆序排列,让最新发表的文章排在文章列表的最前面,我们对返回的文章列表进行了排序,即各个视图函数中都有类似于 Post.objects.all().order_by('-created_time') 这样的代码,导致了很多重复。因为只要是返回的文章列表,基本都是逆序排列的,所以可以在 Post 模型中指定 Post 的自然排序方式。

django 允许我们在 models.Model 的子类里定义一个名为 Meta 的内部类,通过这个内部类指定一些属性的值来规定这个模型类该有的一些特性,例如在这里我们要指定 Post 的排序方式。首先看到 Post 的代码,在 Post 模型的内部定义的 Meta 类中,指定排序属性 ordering


AI悦创原创...大约 6 分钟django体系课django体系课
14-交流的桥梁:评论功能

1. 创建评论应用

你好,我是悦创。

相对来说,评论是另外一个比较独立的功能。django 提倡,如果功能相对比较独立的话,最好是创建一个应用,把相应的功能代码组织到这个应用里。我们的第一个应用叫 blog,它里面放了展示博客文章列表和详情等相关功能的代码。而这里我们再创建一个应用,名为 comments,这里面将存放和评论功能相关的代码。首先进入到项目根目录,然后输入如下命令创建一个新的应用:

➜  gossip_django git:(main) ✗ pipenv run python manage.py startapp comments

AI悦创原创...大约 23 分钟django体系课django体系课
13-分类、归档和标签页

你好,我是悦创。

侧边栏已经正确地显示了最新文章列表、归档、分类、标签等信息。现在来完善归档、分类和标签功能,当用户点击归档下的某个日期、分类栏目下的某个分类或者标签栏目下的某个标签时,跳转到文章列表页面,显示该日期、分类或者标签下的全部文章。

1. 归档页面

要显示某个归档日期下的文章列表,思路和显示主页文章列表是一样的,回顾一下主页视图的代码:

# filename: blog/views.py

def index(request):
    post_list = Post.objects.all().order_by('-created_time')
    return render(request, 'blog/index.html', context={'post_list': post_list})

AI悦创原创...大约 7 分钟django体系课django体系课
12-页面侧边栏:使用自定义模板标签

你好,我是悦创。

我们的博客侧边栏有四项内容:最新文章、归档、分类和标签云。这些内容相对比较固定和独立,且在各个页面都会显示,如果像文章列表或者文章详情一样,从视图函数中获取这些数据然后传递给模板,则每个页面对应的视图函数里都要写一段获取这些内容的代码,这会导致很多重复代码。更好的解决方案是直接在模板中获取,为此,我们使用 django 的一个新技术:自定义模板标签来完成任务。

1. 使用模板标签的解决思路

我们前面已经接触过一些 django 内置的模板标签,比如比较简单的 {% static %} 模板标签,这个标签帮助我们在模板中引入静态文件。还有比较复杂的如 {% for %} {% endfor%} 标签。


AI悦创原创...大约 9 分钟django体系课django体系课
11-自动生成文章摘要

你好,我是悦创。

博客文章的模型有一个 excerpt 字段,这个字段用于存储文章的摘要。目前为止,还只能在 django admin 后台手动为文章输入摘要。每次手动输入摘要比较麻烦,对有些文章来说,只要摘取正文的前 N 个字符作为摘要,以便提供文章预览就可以了。因此我们来实现如果文章没有输入摘要,则自动摘取正文的前 N 个字符作为摘要,这有两种实现方法。

1. 覆写 save 方法

第一种方法是通过覆写模型的 save 方法,从正文字段摘取前 N 个字符保存到摘要字段。在 创作后台开启,请开始你的表演 中我们提到过 save 方法中执行的是保存模型实例数据到数据库的逻辑,因此通过覆写 save 方法,在保存数据库前做一些事情,比如填充某个缺失字段的值。


AI悦创原创...大约 4 分钟django体系课django体系课
10-Markdown 文章自动生成目录,提升阅读体验

你好,我是悦创。

上一篇中我们使用了 Markdown 来为文章提供排版支持。Markdown 在解析内容的同时还可以自动提取整个内容的目录结构,现在我们来使用 Markdown 为文章自动生成目录。

1. 在文中插入目录

先来回顾一下博客的 Post(文章)模型,其中 body 是我们存储 Markdown 文本的字段:

# filename: blog/models.py

from django.db import models

class Post(models.Model):
    # Other fields ...
    body = models.TextField()

AI悦创原创...大约 7 分钟django体系课django体系课
Markdown 语法(syntax)

1. 概述

1.1 宗旨

Markdown 的目标是实现「易读易写」。

可读性,无论如何,都是最重要的。一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响,包括 SetextatxTextilereStructuredTextGrutatextEtText,而最大灵感来源其实是纯文本电子邮件的格式。


AI悦创原创...大约 20 分钟django体系课Markdowndjango体系课Markdown
2
3