当前位置:K88软件开发文章中心网站服务器框架django → 文章内容

Django 集成的子框架

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-25 14:19:27

由 lxjazni_7 创建,路飞 最后一次修改 2016-02-24 Python有众多优点,其中之一就是“开机即用”原则: 安装Python的同时会安装好大量的标准软件包,这样 你可以立即使用而不用自己去下载。 Django也遵循这个原则,它同样包含了自己的标准库。 这一章就来讲 这些集成的子框架。Django标准库Django的标准库存放在 django.contrib 包中。每个子包都是一个独立的附加功能包。 这些子包一般是互相独立的,不过有些django.contrib子包需要依赖其他子包。在 django.contrib 中对函数的类型并没有强制要求 。其中一些包中带有模型(因此需要你在数据库中安装对应的数据表),但其它一些由独立的中间件及模板标签组成。django.contrib 开发包共有的特性是: 就算你将整个django.contrib开发包删除,你依然可以使用 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文档。本章接下来将详细描述前面没有介绍过的 django.contrib 开发包内容。多个站点Django 的多站点系统是一种通用框架,它让你可以在同一个数据库和同一个Django项目下操作多个网站。 这是一个抽象概念,理解起来可能有点困难,因此我们从几个让它能派上用场的实际情景入手。情景1:多站点间复用数据正如我们在第一章里所讲,Django 构建的网站 LJWorld.com 和 Lawrance.com 是用由同一个新闻组织控制的: 肯萨斯州劳伦斯市的 劳伦斯日报世界 报纸。 LJWorld.com 主要做新闻,而 Lawrence.com 关注本地娱乐。 然而有时,编辑可能需要把一篇文章发布到 两个 网站上。解决此问题的死脑筋方法可能是使用每个站点分别使用不同的数据库,然后要求站点维护者把同一篇文章发布两次: 一次为 LJWorld.com,另一次为Lawrence.com。 但这对站点管理员来说是低效率的,而且为同一篇文章在数据库里保留多个副本也显得多余。更好的解决方案? 两个网站用的是同一个文章数据库,并将每一篇文章与一个或多个站点用多对多关系关联起来。 Django 站点框架提供数据库表来记载哪些文章可以被关联。 它是一个把数据与一个或多个站点关联起来的钩子。情景2:把网站的名字/域名保存在一个地方LJWorld.com 和 Lawrence.com 都有邮件提醒功能,使读者注册后可以在新闻发生后立即收到通知。 这是一种完美的的机制: 某读者提交了注册表单,然后马上就受到一封内容是“感谢您的注册”的邮件。把这个注册过程的代码实现两遍显然是低效、多余的,因此两个站点在后台使用相同的代码。 但感谢注册的通知在两个网站中需要不同。 通过使用 Site 对象,我们通过使用当前站点的 name (例如 'LJWorld.com' )和domain (例如 'www.ljworld.com' )可以把感谢通知抽提出来。Django 的多站点框架为你提供了一个位置来存储 Django 项目中每个站点的 name 和 domain ,这意味着你可以用同样的方法来重用这些值。如何使用多站点框架多站点框架与其说是一个框架,不如说是一系列约定。 所有的一切都基于两个简单的概念:位于 django.contrib.sites 的 Site 模型有 domain 和 name 两个字段。SITE_ID 设置指定了与特定配置文件相关联的 Site 对象之数据库 ID。如何运用这两个概念由你决定,但 Django 是通过几个简单的约定自动使用的。安装多站点应用要执行以下几个步骤:将 '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。多站点框架的功能下面几节

[1] [2] [3] [4] [5] [6]  下一页


Django 集成的子框架