django by example 实践--blog 项目(二)


点我查看本文集的说明及目录。


本项目相关内容( github传送 )包括:

实现过程

CH1 创建一个博客应用

CH2 使用高级特性增强博客功能

CH3 扩展博客功能

项目总结及改进

使用类视图实现 blog list 和 detail 视图


CH2 使用高级特性增强博客功能

前面一章,我们建立了一个简单的 blog 应用。现在我们使用高级特性对 blog 进行完善,增加通过 e-mail 分享文章、添加评论、添加文章标签、获取相似文章等功能。这一章我们将学习以下内容:

  • 使用 Django 发送 e-mails
  • 创建 forms 并在视图中处理它们
  • 根据模型创建 forms
  • 集成第三方应用
  • 创建复杂的 QuerySets

通过e-mail分享文章


首先,我们实现通过发送邮件的方式分享文章。想一下如何通过上一章学到 views 、URL's 和 templates 实现这个功能。要实现通过 e-mail 发送邮件,我们需要:

  • 为用户创建一个表单来填写他们的名字、e-mail、接收文章的 e-mail 和评论(可选);
  • 在 views.py 文件中创建一个视图来处理 post 的数据并发送 e-mail ;
  • 在 urls.py 文件中为新建的视图添加 URL 模式。
  • 创建一个模板来展示表单。

使用Django创建表单

笔者注:

下面表述中 form 与表单意义相同。

我们从创建分享文章的表单开始。Django 内置的 form 框架帮助我们非常方便的创建表单。form 框架允许我们定义 form 的字段、指定字段展示方式、指定数据验证方法。Django form 框架还提供渲染表单和处理数据的方法。

Django提供两个类来创建表单:

  • Form:帮助我们创建标准表单;
  • ModelForm:帮助我们创建增加或者修改模型实例的表单。

首先,在 blog 应用的根目录新建一个名为 forms.py 的文件,并添加以下代码:

from django import forms


class EmailPostForm(forms.Form):
    name = forms.CharField(max_length=25)
    email = forms.EmailField()
    to = forms.EmailField()
    comments = forms.CharField(required=False, widget=forms.Textarea)

这是你的第一个 Django 表单。我们来看一下代码:创建继承 Form 的表单类,使用不同的字段对输入进行验证。

注意:

Forms 可以放在 Django 项目的任何位置,为了方便起见,我们将其放在每个应用的 forms.py 文件中。

name 字段是一个 CharField 。这种类型的字段渲染一个的 HTML元素。每一个字段都有默认的组件,这个组件决定 HTML 如何展示该字段。可以设置字段的 widget 属性覆盖默认的组件。在 comments 字段中,我们使用 Textarea 组件表示使用