【django 学习笔记】15-集成的子框架

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

安装多站点应用要执行以下几个步骤:

  1. ‘django.contrib.sites’ 加入到 INSTALLED_APPS 中。
  2. 运行 manage.py syncdb 命 令将 django_site 表安装 到数据库中。 这样也会建立默认的站点对象, 域 名为 example.com
  3. example.com 改成 你自己的域名, 然后通过Django admin 站点或Python API 来添加其他Site 对象。 为该 Django 项目支撑的每个站( 或域) 创建一个 Site 对象。
  4. 在每个设置文件中定义一个 SITE_ID 变量。 该变量值应当是该设置文件所支撑的站点Site 对象的数据库ID

多站点框架的功能

多个站点的数据 重用

将 内容与单一 站点相关 联

从视图 钩挂当前 站点

获取当前域用于呈现

当前站点管理器

如果 站点 在你的应用中扮演很重要的角色, 请 考虑在你的模型中使用方便的 CurrentSiteManager 。 这是一个模型管理器( 见 第十章), 它会自动过滤使其只包含与当 前站点相关联的对象。

Django 如何使用 多站点框架

Flatpages( 简 单页面)

尽管通常情况下总是搭建运行数据库驱动的 Web 应用, 有时你还是需要 添加一两张一次性的静态页面, 例如“关 于”页面, 或者“隐私策略”页面等等。

这个问题的解决方案是使用位于 django.contrib.flatpages 开发包中的 Django 简 单页面(flatpages) 应用程 序。该应用让你能够通过 Django 管 理站点来管理这些一次性的页面, 还可以 让你使用 Django 模板系统指定 它们使用哪个模板。

使用简单页面

安装简单页面应用程序必须按照下面的步骤:

  1. 添加 ‘django.contrib.flatpages’ INSTALLED_APPS 设 置。django.contrib.flatpages 依 赖django.contrib.sites, 所 以确保它们都在INSTALLED_APPS 里。
  2. ‘django.contrib.flatpages.middleware.FlatpageFallbackMiddleware’ 添加到 MIDDLEWARE_CLASSES 设置中。
  3. 运行 manage.py syncdb 命 令在数据库中创建必需的两个表。

添加、修改和删除简单页面

通过超级管理界面

如果已经激活了自动的 Django 超 级管理界面, 你将会在超级管理页面的首 页看到有个 Flatpages 区 域。 你

可以像编辑系统中其它对象那样编辑简单页面。

通过 Python API

使用简单页面模板

你必须自己创建 flatpages/default.html 模板。 只需要在模板目录创建一个 flatpages 目录, 并把default.html 文件置于其中。

简单页面模板只接受有一个上下文变量—— flatpage , 也就是该简单页面对象。以下是一个 flatpages/default.html 模板范例:

“http://www.w3.org/TR/REC-html40/loose.dtd”>

{{ flatpage.title }}

{{ flatpage.content|safe }}

重定向

使用重定向框架

安装重定向应用程序必须遵循以下步骤:

  • ‘django.contrib.redirects’ 添加到 INSTALLED_APPS 设置中。
  • ‘django.contrib.redirects.middleware.RedirectFallbackMiddleware’ 添加到 MIDDLEWARE_CLASSES 设置中。
  • 运行 manage.py syncdb 命 令将所需的表添加到数据库中。manage.py syncdb 在数据库中创建了一个 django_redirect 表。 这是一个简单的查询表, 只 有site_idold_pathnew_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 模板过滤器, 每一个都实现了一中通用的标记语言。

你可能感兴趣的:(django)