Django 1.0发行说明

欢迎来到Django 1.0!

三年多来,我们一直期待着这一时刻,它终于到来了。Django 1.0代表了Django发展到目前为止最大的里程碑:一个让一群完美主义者真正感到自豪的Web框架。

Django1.0代表了三年多社区开发的开源项目。Django收到了数百名开发人员的贡献,并被翻译成50种语言,如今被各个大陆和各种工作中的开发人员使用。

一个有趣的历史记录:当2005年7月Django首次发布时,最初发布的Django版本来自于内部存储库,版本号为8825。Django 1.0代表我们的公共存储库的第8961版。我们发布1.0版的时候,社区贡献超过了私人贡献,这似乎是合情合理的。

稳定性和远期兼容性

Django1.0的发布保证了API的稳定性和向前兼容性。简而言之,这意味着您针对Django1.0开发的代码将继续针对1.1不变的代码工作,并且您应该只需要对任何1.x版本进行细微的更改。

API stability guide 详细信息。

向后不兼容的更改

django 1.0从django 0.96有许多向后不兼容的更改。如果您有针对Django 0.96编写的应用程序需要移植,请参阅我们的详细移植指南:

可以在https://code.djangoproject.com/wiki/backwards incompatible changes上找到向后不兼容更改的完整列表。

Django 1.0的新功能

A lot 你说什么?

自Django 0.96以来,我们已经提交了4000多个代码,修复了2000多个错误,编辑、添加或删除了大约350000行代码。我们还添加了40000行新文档,大大改进了现有的文档。

事实上,新文档是我们最喜欢的Django1.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文档:

admin reference 详情

改进的Unicode处理

Django的内部结构已经被重构为使用Unicode;这大大简化了在Django处理非西欧内容和数据的任务。此外,还提供了实用程序功能,以简化与第三方库和系统的互操作性,而第三方库和系统可能或可能无法优雅地处理Unicode。有关详细信息,请参阅Django的Unicode处理文档。

Unicode数据 .

一种改进的ORM

Django的对象关系映射器——提供Django模型类与数据库之间的映射以及调解数据库查询的组件——通过大规模重构得到了显著的改进。对于Django的大多数用户来说,这是向后兼容的;用于数据库查询的面向公共的API经历了一些小的更改,但大多数更新都发生在ORM的内部。有关更改的指南,包括向后不兼容的修改,以及提到通过重构打开的新功能,是 `available on the Django wiki`_ _.

模板变量的自动转义

为了提高跨站点脚本(XSS)漏洞的安全性,Django的模板系统现在自动避开变量的输出。此行为是可配置的,并且允许变量和更大的模板构造标记为安全(不需要转义)或不安全(需要转义)。有关此功能的完整指南,请参见 autoescape 标签。

django.contrib.gis (GeoDjango)

一年多的项目正在进行中,这增加了世界级的地理信息系统。 (Geographic Information Systems )以A的形式支持Django contrib 应用。它的文档目前正在外部维护,并将很快合并到主要的Django文档中。非常感谢Justin Bronn、Jeremy Dunck、Brett Hoerner和Travis Pinney为创建和完成此功能所做的努力。

看见 GeoDjango 了解更多细节。

可插拔文件存储

Django的内置 FileFieldImageField 现在可以利用可插拔的文件存储后端,允许对Django存储上载文件的位置和方式进行广泛的自定义。有关详细信息,请参阅 the files documentation 感谢Marty Alchin为完成这项工作所付出的努力。

Jython兼容性

由于Leo Soto在Google夏季代码项目中的大量工作,Django的代码库已经被重构,以消除与 Jython 一个用Java编写的Python的实现,它在Java虚拟机上运行Python代码。Django现在与即将发布的Jython2.5版本兼容。

表单和管理中的一般关系

课程现在包括在 django.contrib.contenttypes 它可以用于支持管理界面和最终用户表单中的通用关系。见 the documentation for generic relations 有关详细信息。

INSERT/UPDATE 区别

尽管Django的默认行为是 save() 方法自动确定是否执行 INSERTUPDATE 在SQL级别适合大多数情况,有时强制一个或另一个是有用的。因此,模型现在可以支持 save() 可以强制执行特定操作。

强制插入或更新 有关详细信息。

分裂 CacheMiddleware

Django CacheMiddleware 分为三类: CacheMiddleware 它本身仍然存在并保留了以前的所有功能,但现在它是由两个单独的中间件类构建的,这些类分别处理缓存的两个部分(插入和从缓存中读取),为将这些功能组合到单个中间件造成问题的情况提供了额外的灵活性。

完整的细节,包括有关适当使用的更新说明 the caching documentation .

重构的 django.contrib.comments

作为谷歌夏季代码项目的一部分,Jaswi Puthraya对Django的捆绑评论系统进行了重大的重写和重构,极大地提高了其灵活性和可定制性。

删除不推荐的功能

Django中不再存在许多以前被标记为不推荐使用的功能和方法,这些功能和方法计划在1.0版本之前删除。其中包括从表单库导入 django.newforms (现在只需位于 django.forms )、 form_for_modelform_for_instance 帮助器函数(已替换为 ModelForm )和一些过时的特性,这些特性被Django 1.0 Alpha版本中引入的Dispatcher、文件上传和文件存储重构所取代。

已知问题

我们已经尽了最大努力使django 1.0尽可能稳定,但不幸的是,在版本中我们知道了一些问题。

多表模型继承 to_field

如果你在用 multiple table model inheritance ,请注意以下警告:使用自定义的子模型 parent_linkto_field 将导致数据库完整性错误。像下面这样的一组模型是 无效的 ::

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()

这个bug将在下一个版本的django中修复。

支持某些数据库的注意事项

Django尝试在所有数据库后端支持尽可能多的功能。然而,并不是所有的数据库后端都是相同的,特别是许多受支持的数据库在版本之间存在很大的差异。结账是个好主意 notes on supported database