Django 标准库
Django 的标准库存放在 django.contrib 包中。
django.contrib 由 以下开发包组成:
- admin : 自动化的站 点管理工具。 请查看第6 章。
- admindocs: 为Django admin 站点提供自动文档。 本书没有介绍这方面的知识; 详情请参 阅Django 官方文档。
- auth : Django 的 用户验证框架。 参见第十四章。
- comments : 一个 评论应用, 目前, 这个应用正在紧张的开发中, 因此在本书出版的时候还不能给出一个完整的说明, 关于这个应用的更多信息请参见Django 的官方网站. 本书没有介绍这方面的知识; 详情请参阅Django 官方文档。
- contenttypes : 这 是一个用于引入文档类型的框架, 每个安 装的Django 模块作为一种独立的文 档类型。这个框架主要在Django 内 部被其他应用使用, 它主要面向Django 的高级开发者。 可以通过阅读源码来了解关于这个框架的更多信息, 源 码的位置在 django/contrib/contenttypes/ 。
- csrf : 这个模块用来 防御跨站请求伪造(CSRF) 。参 见后面标题为”CSRF 防御”的小 节。
- databrowse: 帮助你 浏览数据的Django 应用。 本书没有介绍这方面的知识; 详情请参阅Django 官方文档。
- flatpages : 一 个在数据库中管理单一HTML 内容的模 块。 参见后面标题为“Flatpages” 的 小节。
- formtools: 一些列处 理表单通用模式的高级库。 本书没有介绍这方面的知识; 详 情请参阅Django 官方文档。
- gis: 为Django 提供GIS(Geographic Information Systems) 支持的扩展。 举个例子, 它允许你的Django 模型保存地理学数据并执行地理学查询。 这个库比较复杂, 本书不详细介绍。 请参看http://geodjango.org/ 上的文 档。
- humanize : 一系 列 Django 模块过滤器, 用于增加数据的人性化。参阅稍后的章节《人性化 数据》。
- localflavor: 针对 不同国家和文化的混杂代码段。 例如, 它 包含了验证美国的邮编 以及爱尔兰的身份证号的方法。
- markup : 一系列的 Django 模板过滤器, 用于实现一些常用标记语言。 参阅后续章节《标记过滤器》。
- redirects : 用 来管理重定向的框架。 参看后面的“重定向”小节。
- sessions : Django 的 会话框架。 参见14 章。
- sitemaps : 用来 生成网站地图的 XML 文件的框架。 参见13 章。
- sites : 一个让你可 以在同一个数据库与 Django 安 装中管理多个网站的框架。 参见下一节:
- syndication : 一 个用 RSS 和 Atom 来生成聚合订阅源的的框架。 参见13 章。
- webdesign : 对设 计者非常有用的Django 扩展。 到编写此文时, 它只包含一个模板标签{% lorem %} 。详情参阅Django 文档。
多个站点
情景1: 多站点间复用 数据
情景2: 把网站的名字/ 域名保存在一个地方
如何使用多站点框架
多站点框架与其说是一个框架, 不 如说是一系列约定。 所有的一切都基于两个简单的概念:
- 位于 django.contrib.sites 的 Site 模型有 domain 和 name 两个字段。
- SITE_ID 设置指定了与 特定配置文件相关联的 Site 对象 之数据库 ID 。
安装多站点应用要执行以下几个步骤:
- 将 ‘django.contrib.sites’ 加入到 INSTALLED_APPS 中。
- 运行 manage.py syncdb 命 令将 django_site 表安装 到数据库中。 这样也会建立默认的站点对象, 域 名为 example.com 。
- 把example.com 改成 你自己的域名, 然后通过Django admin 站点或Python API 来添加其他Site 对象。 为该 Django 项目支撑的每个站( 或域) 创建一个 Site 对象。
- 在每个设置文件中定义一个 SITE_ID 变量。 该变量值应当是该设置文件所支撑的站点Site 对象的数据库ID 。
多站点框架的功能
多个站点的数据 重用
将 内容与单一 站点相关 联
从视图 钩挂当前 站点
获取当前域用于呈现
当前站点管理器
如果 站点 在你的应用中扮演很重要的角色, 请 考虑在你的模型中使用方便的 CurrentSiteManager 。 这是一个模型管理器( 见 第十章), 它会自动过滤使其只包含与当 前站点相关联的对象。
Django 如何使用 多站点框架
Flatpages( 简 单页面)
尽管通常情况下总是搭建运行数据库驱动的 Web 应用, 有时你还是需要 添加一两张一次性的静态页面, 例如“关 于”页面, 或者“隐私策略”页面等等。
这个问题的解决方案是使用位于 django.contrib.flatpages 开发包中的 Django 简 单页面(flatpages) 应用程 序。该应用让你能够通过 Django 管 理站点来管理这些一次性的页面, 还可以 让你使用 Django 模板系统指定 它们使用哪个模板。
使用简单页面
安装简单页面应用程序必须按照下面的步骤:
- 添加 ‘django.contrib.flatpages’ 到 INSTALLED_APPS 设 置。django.contrib.flatpages 依 赖django.contrib.sites, 所 以确保它们都在INSTALLED_APPS 里。
- 将 ‘django.contrib.flatpages.middleware.FlatpageFallbackMiddleware’ 添加到 MIDDLEWARE_CLASSES 设置中。
- 运行 manage.py syncdb 命 令在数据库中创建必需的两个表。
添加、修改和删除简单页面
通过超级管理界面
如果已经激活了自动的 Django 超 级管理界面, 你将会在超级管理页面的首 页看到有个 Flatpages 区 域。 你
可以像编辑系统中其它对象那样编辑简单页面。
通过 Python API
使用简单页面模板
你必须自己创建 flatpages/default.html 模板。 只需要在模板目录创建一个 flatpages 目录, 并把default.html 文件置于其中。
简单页面模板只接受有一个上下文变量—— flatpage , 也就是该简单页面对象。以下是一个 flatpages/default.html 模板范例:
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”
“http://www.w3.org/TR/REC-html40/loose.dtd”>
<html>
<head>
<title>{{ flatpage.title }}</title>
</head>
<body>
{{ flatpage.content|safe }}
</body>
</html>
重定向
使用重定向框架
安装重定向应用程序必须遵循以下步骤:
- 将 ‘django.contrib.redirects’ 添加到 INSTALLED_APPS 设置中。
- 将 ‘django.contrib.redirects.middleware.RedirectFallbackMiddleware’ 添加到 MIDDLEWARE_CLASSES 设置中。
- 运行 manage.py syncdb 命 令将所需的表添加到数据库中。manage.py syncdb 在数据库中创建了一个 django_redirect 表。 这是一个简单的查询表, 只 有site_id 、old_path 和new_path 三个字段。
你可以通过 Django 超级 管理界面或者 Django 数据库 API 来创建重定向。
增加、变更和删除重定向
你可以两种方式增加、变更和删除重定向:
通过管理界面
同过Python API
CSRF 防护
django.contrib.csrf 开 发包能够防止遭受跨站请求伪造攻击 (CSRF).
使 用CSRF 中间件
django.contrib.csrf 开 发包只有一个模块: middleware.py 。 该模块包含了一个 Django 中间 件类——CsrfMiddleware , 该 类实现了 CSRF 防护功能。
人性化数据
包django.contrib.humanize 包 含了一些是数据更人性化的模板过滤器。 要激活这些过滤器, 请把‘django.contrib.humanize’ 加 入到你的INSTALLED_APPS 中。 完成之后, 向模版了加入{% load humanize %} 就可以使用 下面的过滤器了。
apnumber
对于 1 到 9 的数字, 该过滤器返回了数字的拼写形式。 否则, 它将返回数字。
ntcomma
该过滤器将整数转换为每三个数字用一个逗号分隔的字符串
intword
该过滤器将一个很大的整数转换成友好的文本表示方式。 它对于超过一百万的数字最好用
ordinal
该过滤器将整数转换为序数词的字符串形式。
标记过滤器
包django.contrib.markup 包 含了一些列Django 模板过滤器, 每一个都实现了一中通用的标记语言。