Django 1.0 版本发行说明

欢迎来到 Django 1.0 版本!

我们期待这一刻已经三年多了,现在它终于来了。Django 1.0是Django开发过程中最大的一个里程碑:这是一个让一群完美主义者感到自豪的Web框架。

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其它的主要亮点有:

Refactored admin application

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:

class Parent(models.Model):
    name = models.CharField(max_length=10)
    other_value = models.IntegerField(unique=True)


class Child(Parent):
    father = models.OneToOneField(
        Parent, primary_key=True, to_field="other_value", parent_link=True
    )
    value = models.IntegerField()

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

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

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