Django 1.0 发行说明 — Django 文档
Django 1.0 发行说明
欢迎来到 Django 1.0!
三年多来,我们一直期待这一刻,它终于来了。 Django 1.0 代表了 Django 迄今为止发展的最大里程碑:一个让一群完美主义者真正引以为豪的 Web 框架。
Django 1.0 作为一个开源项目代表了三年多的社区开发。 Django 收到了数百名开发人员的贡献,被翻译成 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 0.96 相比,Django 1.0 有许多向后不兼容的更改。 如果您有针对 Django 0.96 编写的应用程序需要移植,请参阅我们的详细移植指南:
可以在 https://code.djangoproject.com/wiki/BackwardsIncompatibleChanges 中找到向后不兼容更改的完整列表。
Django 1.0 中的新功能
批 !
自 Django 0.96 以来,我们已经提交了 4,000 多次代码,修复了 2,000 多个错误,并编辑、添加或删除了大约 350,000 行代码。 我们还添加了 40,000 行新文档,并大大改进了现有文档。
事实上,新文档是我们最喜欢的 Django 1.0 特性之一,所以我们不妨从这里开始。 首先,有一个新的文档站点:
文档得到了极大的改进、清理,并且总体上变得很棒。 现在有专门的搜索、索引等。
我们不可能记录 1.0 中的所有新内容,但文档将是您的权威指南。 任何你看到的地方,比如:
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 的模板系统现在会自动转义变量的输出。 此行为是可配置的,并允许将变量和更大的模板构造标记为安全(不需要转义)或不安全(需要转义)。 此功能的完整指南位于 :ttag:`autoescape` 标签的文档中。
django.contrib.gis (GeoDjango)
这是一个历时一年多的项目,它以 contrib
应用程序的形式为 Django 添加了世界一流的 GIS(地理信息系统 )支持。 它的文档目前由外部维护,很快就会合并到主要的 Django 文档中。 非常感谢 Justin Bronn、Jeremy Dunck、Brett Hoerner 和 Travis Pinney 在创建和完成此功能方面所做的努力。
详见 GeoDjango。
可插拔文件存储
Django 的内置 FileField
和 ImageField
现在可以利用可插入的文件存储后端,允许对 Django 存储上传文件的位置和方式进行广泛的自定义。 详情参见文件文档; 非常感谢 Marty Alchin 为完成这项工作付出的辛勤工作。
Jython 兼容性
感谢 Leo Soto 在 Google Summer of Code 项目中的大量工作,Django 的代码库已被重构,以消除与 Jython 的不兼容,Jython 是用 Java 编写的 Python 实现,它在 Java 虚拟机上运行 Python 代码机器。 Django 现在与即将发布的 Jython 2.5 版本兼容。
INSERT/UPDATE区别
尽管 Django 的默认行为是让模型的 save()
方法自动确定是在 SQL 级别执行 INSERT
还是 UPDATE
适合大多数情况,但偶尔会出现强制一种或另一种有用的情况。 因此,模型现在可以支持 save()
的附加参数,该参数可以强制执行特定操作。
有关详细信息,请参阅 强制插入或更新 。
分体式 CacheMiddleware
Django 的 CacheMiddleware
被分成三个类:CacheMiddleware
本身仍然存在并保留了它以前的所有功能,但它现在是由两个独立的中间件类构建的,它们处理缓存的两个部分(插入入和从缓存中读取),为将这些功能组合到单个中间件带来问题的情况提供额外的灵活性。
缓存文档中提供了完整的详细信息,包括有关正确使用的更新说明。
重构 django.contrib.comments
作为 Google Summer of Code 项目的一部分,Thejaswi Puthraya 对 Django 的捆绑评论系统进行了重大重写和重构,大大提高了其灵活性和可定制性。
删除不推荐使用的功能
许多以前被标记为已弃用并计划在 1.0 版本之前删除的功能和方法在 Django 中不再存在。 这些包括从 django.newforms
(现在仅位于 django.forms
)、form_for_model
和 form_for_instance
辅助函数(已被 [ X166X]) 以及许多已弃用的功能,这些功能已被 Django 1.0 alpha 版本中引入的调度程序、文件上传和文件存储重构所取代。
已知问题
我们已尽最大努力使 Django 1.0 尽可能稳定,但不幸的是,我们在版本中了解了一些问题。
to_field多表模型继承
如果您使用 多表模型继承 ,请注意此警告:使用自定义 parent_link
和 to_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()
这个错误将在 Django 的下一个版本中修复。