欢迎来到 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 0.96 开始,我们已经提交了 4000 多次的代码,修复了 2000 多个漏洞,并编辑了大约 350000 行的代码。我们还添加了 40000 行的新文档,极大的改进了现有的内容。
事实上,新的文档就是Django 1.0中我们喜欢的特性之一,所以我们也会从新的文档作为起点。首先,新的文档网页是:
文档已经有了很大的提升,整洁,而且通常做的很好。目前专注在搜索、索引,以及等等功能上。
在新的1.0版本中我们无法对每一件事做到文档化,但文档确实能作为你的开发指南。任何你所看到的,例如:
此功能是 Django 1.0 中的新功能
你能知道你所要找的新内容,或者有哪些变化。
Django 1.0其它的主要亮点有:
Django的管理接口 (django.contrib.admin
) 已经完全重构了;管理员定义功能目前完全解构成模块定义形式 (不再是 class Admin
模块中的类形式!) ,重写代码来使用Django的新表单处理库 (曾在 0.96 版本中介绍成 django.newforms
内容,而此时直接可用成 django.forms
了) 以及重新设计成具有扩展能力和自定义能力。完整的管理员应用程序文档在官方Django文档网站上可以看到:
参考 管理员指南 了解细节
Django内部机制已经重构成使用Unicode字符集;这回彻底让在Django中使用处理非西欧内容和数据的任务变得容易。另外,工具函数都提供成容易与第三方库协同工作的函数,甚至也能够与那些不能处理Unicode字符集的操作系统一起协同工作。细节都可以在Django的Unicode处理文档中找到可用的内容。
参见 Unicode 数据。
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的内置 FileField
和 ImageField
目前获得了后端移动文件存储的功能优势,Django允许扩展自定义上传文件,指定上传文件的位置和如何上传文件。细节可以查看 文件文档内容; 非常感谢 Marty Alchin 投入了艰难的工作完成这项特性功能。
非常感谢 Leo Soto 在谷歌夏季编程项目中做了大量工作,Django的代码库已经重构后删除了与 `Jython`_不兼容的代码部分,一项用Java写的Python部署,可以在Java虚拟机上运行Python代码。Django目前可以胜任即将发布的 Jython 2.5 版本了。
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_model
和 form_for_instance
辅助函数 (都被 ModelForm
所取代) 以及一些淘汰的特性都换成了调度器,文件上传和文件存储功能,在Django 1.0 alpha版本中进行的重构。
我们让 Django 1.0 尽可能成为稳固版本做了最好的工作,但不幸的是在发布后依然有一些问题。
to_field
¶如果你正在使用 多表模型继承 的话,要知道一项警告:子模型在使用一个自定义 parent_link
和 to_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 尽可能支持所有数据库后端的特性。不管如何,不是所有的数据库后端都可能实现,并且在许多特殊的数据库支持上都是每个版本都有不同之处。有一个好的办法就是查阅文档 所支持的数据库注意事项:
5月 12, 2023