Django 1.0 版本发行说明

欢迎来到 Django 1.0 版本!

We’ve been looking forward to this moment for over three years, and it’s finally here. Django 1.0 represents the largest milestone in Django’s development to date: a web framework that a group of perfectionists can truly be proud of.

Django 1.0 作为一个开发了三年多的开源项目,得到了数百名开发人员的支持,并被翻译成50多种语言,现在仍广泛的被世界各地的开发人员用于各种工作中

一个有趣的历史性注意事项:当Django于2005年7月第一次发布的时候,最初发布的Django版本来自互联网仓库,修订版本号是8825。Django 1.0 代表的是我们公开仓库里的修订版 8961。这看起来是符合我们当时1.0发布的到来,那个时候社区贡献者们都过度地私有化。

稳定性和向前兼容性

随着Django 1.0的发布,提供了承诺的API稳定性和向前兼容性。意思就是你针对Django 1.0所开发的代码能够用在1.1版本没有变化的地方,然后只需要你做少量的代码变更就可以适用 1.X 版本。

查阅文档:“API稳定性指南”了解详细信息

不向后兼容的变更

Django 1.0 有许多与 Django 0.96 不兼容的修改。如果您有Django 0.96 的应用需要移植,请查看我们的详细移植指南。

查看不兼容的更改列表请移步:https://code.djangoproject.com/wiki/BackwardsIncompatibleChanges.

Django 1.0 新特性

很多

从 Django 0.96 开始,我们已经提交了 4000 多次的代码,修复了 2000 多个漏洞,并编辑了大约 350000 行的代码。我们还添加了 40000 行的新文档,极大的改进了现有的内容。

事实上,新的文档就是Django 1.0中我们喜欢的特性之一,所以我们也会从新的文档作为起点。首先,新的文档网页是:

文档已经有了很大的提升,整洁,而且通常做的很好。目前专注在搜索、索引,以及等等功能上。

在新的1.0版本中我们无法对每一件事做到文档化,但文档确实能作为你的开发指南。任何你所看到的,例如:

New in Django 1.0:

此功能是 Django 1.0 中的新功能

你能知道你所要找的新内容,或者有哪些变化。

Django 1.0其它的主要亮点有:

重构了管理员应用程序

Django的管理接口 (django.contrib.admin) 已经完全重构了;管理员定义功能目前完全解构成模块定义形式 (不再是 class Admin 模块中的类形式!) ,重写代码来使用Django的新表单处理库 (曾在 0.96 版本中介绍成 django.newforms 内容,而此时直接可用成 django.forms 了) 以及重新设计成具有扩展能力和自定义能力。完整的管理员应用程序文档在官方Django文档网站上可以看到:

参考 管理员指南 了解细节

改进了 Unicode 的处理

Django内部机制已经重构成使用Unicode字符集;这回彻底让在Django中使用处理非西欧内容和数据的任务变得容易。另外,工具函数都提供成容易与第三方库协同工作的函数,甚至也能够与那些不能处理Unicode字符集的操作系统一起协同工作。细节都可以在Django的Unicode处理文档中找到可用的内容。

参见 Unicode 数据

一项ORM提升

Django的面向对象映射器 — 这个组件提供了把Django模型类与你的数据库映射起来的作用,而且调解你的数据库查询 — 都是通过大量重构代码工作实现了动态提升。对于大部分Django用户来说,这是一种向后兼容的体现;对于数据库查询来说,公开面对API经历了很少的变更,但大部分更新都是发生在ORM的内部机制中。一项变更指南,包括向后兼容的修改,以及一些新特性的提醒都是通过这次重构开放出来的,相关内容是在 `可用的Django wiki`__上找到。

模版变量的自动转义

要提供针对跨网页脚本(XSS)漏洞的安全提升,Django的模版系统现在会对变量结果进行自动转义。这种行为是可以进行配置的,而且既可以允许变量标记出安全,也可以对更大模版的建立标记成安全(即需要不执行转义)或标记成不安全(即需要执行转义)。自动转移这个特性的完整指南在文档中 autoescape 标签位置上。

django.contrib.gis (Django地理信息功能)

一个为期超过一年以上的项目,就是世界级别类型的GIS (地理信息系统) 支持了Django框架,是以一种 contrib 应用程序形式运作的。本身的文档目前由项目外团队进行维护,并且很快以后会合并到Django主文档中去。非常感谢 Justin Bronn, Jeremy Dunck, Brett Hoerner 和 Travis Pinney 为建立和完成本特性而做出的努力。

详见 GeoDjango

移动文件存储

Django的内置 FileFieldImageField 目前获得了后端移动文件存储的功能优势,Django允许扩展自定义上传文件,指定上传文件的位置和如何上传文件。细节可以查看 文件文档内容; 非常感谢 Marty Alchin 投入了艰难的工作完成这项特性功能。

Jython 兼容性

非常感谢 Leo Soto 在谷歌夏季编程项目中做了大量工作,Django的代码库已经重构后删除了与 `Jython`_不兼容的代码部分,一项用Java写的Python部署,可以在Java虚拟机上运行Python代码。Django目前可以胜任即将发布的 Jython 2.5 版本了。

表单和管理员中的普通关联

许多类目前都放在了 django.contrib.contenttypes 模块中,这是用来支持后台接口和用户形式的普通关联。参考 普通关联文档 了解细节。

INSERT``和``UPDATE 区别

尽管 Django对于SQL数据库 INSERT``或 ``UPDATE 操作有一个默认自动执行的模型``save()``方法行为,在大多数情况下都适用,但偶尔也有一些情况要强制使用一个或另一个才行。作为结果,许多模块目前可以支持另一个可选参数,让``save()``方法强制执行具体的一个操作。

参考 指向模型强制插入 文档了解细节。

去掉 CacheMiddleware

Django的 CacheMiddleware 已经分解成三个类了: CacheMiddleware 依然存在并且保留了以前本身的全部功能,但目前建立要从2个不同的中间件类来建立,分别处理缓存中的2个部分 (插入到缓存中和从缓存中读取),这样为一些情况提供了额外的灵活性,例如把许多功能组合到一个中间件里来解决问题。

全部细节,包括适当地更新注释,都在 :doc:`缓存文档 </topics/cache>`中。

重构 django.contrib.comments

作为谷歌夏季代码项目的一部分, Thejaswi Puthraya 负责主要的重写和重构Django的捆绑注释系统,极大地提高了灵活性和自定义功能。

移除淘汰的特性

一些特性和方法前面已经标记成淘汰的内容,而且在1.0版本发布时会被移除,在现在的Django版本中已经没有了。这些包括了导入库名 django.newforms (目前导入库名直接变成了 django.forms),而且 form_for_modelform_for_instance 辅助函数 (都被 ModelForm 所取代) 以及一些淘汰的特性都换成了调度器,文件上传和文件存储功能,在Django 1.0 alpha版本中进行的重构。

已知问题

我们让 Django 1.0 尽可能成为稳固版本做了最好的工作,但不幸的是在发布后依然有一些问题。

多表模型继承使用 to_field

如果你正在使用 多表模型继承 的话,要知道一项警告:子模型在使用一个自定义 parent_linkto_field 的时候会导致数据库整合错误。一套模型可能会出现 not valid:

  1. class Parent(models.Model):
  2. name = models.CharField(max_length=10)
  3. other_value = models.IntegerField(unique=True)
  4. class Child(Parent):
  5. father = models.OneToOneField(Parent, primary_key=True, to_field="other_value", parent_link=True)
  6. value = models.IntegerField()

这个漏洞将在 Django 的下一个版本中修复。

警告中含带某些数据库支持信息

Django 尽可能支持所有数据库后端的特性。不管如何,不是所有的数据库后端都可能实现,并且在许多特殊的数据库支持上都是每个版本都有不同之处。有一个好的办法就是查阅文档 所支持的数据库注意事项