2009年7月29日
欢迎来到Django 1.1!
Django 1.1包括一些漂亮的新功能,大量的错误修复,以及从Django 1.0的简单升级路径。
Django的政策是API stability。这意味着,一般来说,你针对Django 1.0开发的代码应该继续工作对1.1不变。但是,如果有必要解决错误,我们有时会进行向后不兼容的更改,并且Django 1.0和Django 1.1之间有一些(小的)更改。
在升级到Django 1.1之前,您应该仔细检查以下更改不会对您造成影响,如果有,请升级您的代码。
Django 1.1修改用于生成数据库约束名称的方法,以使名称一致,而不考虑机器字大小。此更改对于某些用户向后不兼容。
如果你使用的是32位的平台,您将没有观察到此更改的结果的差异。
但是,使用reset管理命令,64位平台上的用户可能会遇到一些问题。在此更改之前,64位平台将在约束名称中生成一个64位,16个字符的摘要;例如:
ALTER TABLE myapp_sometable ADD CONSTRAINT object_id_refs_id_5e8f10c132091d1e FOREIGN KEY ...
在此更改之后,所有平台,无论字大小,将在约束名称中生成一个32位,8个字符的摘要;例如:
ALTER TABLE myapp_sometable ADD CONSTRAINT object_id_refs_id_32091d1e FOREIGN KEY ...
作为此更改的结果,您将无法对64位计算机上的任何表使用reset管理命令。这是因为新生成的名称将不匹配历史生成的名称;因此,由reset命令构造的SQL将无效。
如果需要重置使用64位约束创建的应用程序,则需要在调用reset之前手动删除旧的约束。
Django 1.1在事务中运行测试,以提高测试性能(有关详细信息,请参阅测试性能改进)。
如果现有测试需要测试事务行为,如果它们依赖关于测试环境的无效假设,或者如果它们需要特定的测试用例排序,则此更改略微向后不兼容。
对于这些情况,可以改用TransactionTestCase。这是一个快速修复,以解决新的回滚方法显示的测试用例错误;在长期测试中应该重写以纠正测试用例。
For convenience, Django 1.0 included an optional middleware class – django.middleware.http.SetRemoteAddrFromForwardedFor – which updated the value of REMOTE_ADDR based on the HTTP X-Forwarded-For header commonly set by some proxy configurations.
已经证明,这种机制不能足够可靠地用于通用目的,并且(尽管文档相反)将其包括在Django中可以使得应用开发者假设REMOTE_ADDR的值是“安全”或以某种方式可靠地作为认证源。
虽然不是直接的安全问题,我们决定删除这个中间件与Django 1.1版本。它已被替换为一个类,除了raise a DeprecationWarning。
如果你一直依赖这个中间件,最简单的升级路径是:
在Django 1.0中,上传并存储在模型的FileField中的文件在将模型保存到数据库之前已保存到磁盘。这意味着分配给文件的实际文件名在保存前可用。例如,它在模型的预保存信号处理程序中可用。
在Django 1.1中,文件被保存为数据库中保存模型的一部分,因此在保存模型之后之前,不能依赖磁盘上使用的实际文件名。
在Django 1.1中,BaseModelFormSet现在调用ModelForm.save()。
如果您在模型表单集的__init__中修改self.initial,或者如果您依赖于内部_total_form_count或_initial_form_count属性。这些属性现在是公共方法。
join过滤器不再转义为连接器传递的文字值。
这对于包含五个特殊HTML字符之一的文字字符串的特殊情况向后不兼容。因此,如果您正在撰写{{ foo | join:“&” }} 写入{{ foo | join:“& amp;” }}。
以前的行为是一个错误,与记录和预期相反。
Django 1.1在django.views.generic.simple.redirect_to()视图中添加了permanent参数。如果您使用具有称为“permanent”的格式字符串键的redirect_to视图,这在技术上是向后不兼容的,这是不太可能的。
一个功能在Django 1.1中已标记为已弃用:
您不应再使用AdminSite.root()注册该管理视图。也就是说,如果您的URLconf包含以下行:
(r'^admin/(.*)', admin.site.root),
您应该将其更改为:
(r'^admin/', include(admin.site.urls)),
您应该立即从代码中删除使用此功能。
AdminSite.root会在Django 1.1中使用PendingDeprecationWarning。默认情况下隐藏此警告。在Django 1.2中,此警告将升级为DeprecationWarning,将大声显示。Django 1.3将完全删除AdminSite.root()。
有关我们的弃用政策和策略的详情,请参阅Django’s release process。
有一点:自Django 1.0以来,我们已经做了1,290个代码提交,修复了1,206个错误,并增加了大约10,000行文档。
Django 1.1中的主要新功能有:
Django的对象关系映射器(ORM)增加了两个主要的增强功能:聚合支持和查询表达式。
现在可以运行SQL聚合查询(即COUNT(),MAX(),MIN()等)从Django的ORM。您可以选择直接返回聚合结果,也可以在QuerySet中使用聚合查询的结果注释对象。
此功能可作为新的aggregate()和annotate()方法使用,并在the ORM aggregation documentation中详细介绍。
查询现在可以引用查询上的另一个字段,并可以遍历关系以引用相关模型上的字段。这在新的F对象中实现;有关详细信息(包括示例),请参阅F expressions documentation。
Django的模型层添加了许多功能:
现在,您可以使用managed模型选项控制Django是否管理模型的数据库表的生命周期。默认为True,这意味着Django将在syncdb中创建相应的数据库表,并将其作为reset命令的一部分删除。也就是说,Django 管理数据库表的生命周期。
但是,如果将此设置为False,则不会为此模型自动执行数据库表创建或删除。如果模型表示已由某些其他方法创建的现有表或数据库视图,这将非常有用。
有关详细信息,请参阅managed选项的文档。
现在,您可以创建proxy models:现有模型的子类,只添加Python级别(而不是数据库级别)行为,而不是由新表格表示。也就是说,新模型是用于存储所有真实数据的一些基础模型的代理。
所有详细信息均可在proxy models documentation中找到。这个特性在表面上类似于非托管模型,因此文档解释了how proxy models differ from unmanaged models。
对testing framework进行了一些显着的改进。
使用Django的testing framework写入的测试现在运行得更快(在许多情况下快10倍)。
这是通过引入基于事务的测试来实现的:当使用django.test.TestCase时,您的测试现在将在完成后回滚的事务中运行,而不是通过刷新和重新运行,填充数据库。这导致大多数类型的单元测试的极大的加速。有关完整说明和有关数据库支持的一些重要说明,请参阅TestCase和TransactionTestCase的文档。
对测试客户端进行了一些小但是非常有用的改进:
Django 1.1为Django的管理界面添加了一些漂亮的新功能:
现在,您可以通过新的list_editable管理选项在管理列表视图中修改字段。这些字段将在列表页面上显示为表单小部件,并且可以批量编辑和保存。
您现在可以定义admin actions,可以批量对一组模型执行某些操作。用户可以在更改列表页面上选择对象,然后将这些批量操作应用于所有选定的对象。
Django附带一个预定义的管理操作,以一次删除一组对象。
Django现在对使用标准ETag和Last-Modified HTTP标头的conditional view processing有更好的支持。这意味着您现在可以通过测试成本较低的条件,轻松地短路视图处理。对于许多视图,这可以导致速度的显着改善和带宽的减少。
Django 1.1通过引入URL“namespaces”来改进named URL patterns。
简而言之,此功能允许来自同一应用程序的同一组网址多次包含在Django URLConf中,并具有在执行反向解析时将使用的变化(可能嵌套)命名的前缀。换句话说,可重用的应用程序,如Django的管理界面可能会注册多次,没有URL冲突。
有关完整的详细信息,请参阅the documentation on defining URL namespaces。
在Django 1.1中,GeoDjango(即django.contrib.gis)有几个新功能:
有关更多详细信息,请参阅GeoDjango文档。
自Django 1.0以来引入的其他新功能和更改包括:
我们会休息一下,然后工作在Django 1.2将开始 - 没有休息的疲惫!如果你想帮助,讨论Django开发,包括朝着1.2版本的进展,每天在django开发者邮件列表:
...以及irc.freenode.net的#django-dev IRC频道中。随意加入讨论!
Django的在线文档还包括如何为Django做出贡献的指针:
对任何级别的贡献 - 开发代码,编写文档或简单地分类故障单,并帮助测试建议的错误修正 - 总是欢迎和赞赏。
这就是它的样子。
2015年5月13日