从 Django 0.96 升级到 1.0 的最佳方式是啥?
Posted
技术标签:
【中文标题】从 Django 0.96 升级到 1.0 的最佳方式是啥?【英文标题】:What's the best way to upgrade from Django 0.96 to 1.0?从 Django 0.96 升级到 1.0 的最佳方式是什么? 【发布时间】:2010-09-12 19:26:24 【问题描述】:我应该尝试真正升级我现有的应用程序,还是只是从头开始重写它,我可以保存哪些部分(模板等)?
【问题讨论】:
【参考方案1】:虽然这取决于您正在做什么,但大多数应用程序应该能够升级然后修复所有损坏的东西。根据我的经验,升级后我必须解决的主要问题是
对模型的一些时髦内容进行了更改,例如跟随外键的语法。
一小部分模板更改,最明显的是自动转义。
任何依赖于 Django 内部的特定结构的东西。这不应该是一个问题,除非你正在做一些事情,比如动态修改 Django 内部,以对你的项目来说必要/方便的方式改变它们的行为。
总而言之,除非您正在做很多非常奇怪和/或复杂的事情,否则简单的升级应该相对轻松,并且只需要进行一些更改。
【讨论】:
不要忘记管理和表单更改。这些很重要。管理员不难。然而,表格可能是杀手锏。【参考方案2】:升级。对我来说这很简单:将__str__()
更改为__unicode__()
,编写基本的admin.py
,然后完成。只需开始在 1.0 上运行您的应用,对其进行测试,当您遇到错误时,请使用 backwards-incompatible changes 上的文档了解如何解决问题。
【讨论】:
【参考方案3】:只需升级您的应用。从 0.96 到 1.0 的转变是巨大的,但就向后不兼容的变化而言,我怀疑你的应用甚至有 10% 的变化。
我在 Django 1.0 之前就在主干上,所以我的过渡是随着时间的推移,但即便如此,我必须改变的唯一主要事情是 newforms、newforms-admin、str() 到 unicode() 和 maxlength 到 max_length
大多数其他更改是新功能或后端重写或构建基本网站的人甚至无法接近的东西。
【讨论】:
【参考方案4】:只有最简单的网站才能轻松升级。
如果您的网站恰好位于世界上的非 ASCII 部分(阅读:美国和英国以外的任何地方),预计会很痛苦。 Django 中最痛苦的变化是在内部从字节串转换为 unicode 对象——现在您必须找到所有使用字节串的地方并将其更改为 unicode。最坏的情况是模板渲染,你永远不会知道你忘记改变一个变量,直到你得到 UnicodeError。
其他值得注意的事情:操纵器(oldforms)已经消失,除了用表单(newforms)重写所有部分之外别无他法。
如果这是您的情况,并且您的项目大于 2-3 个应用程序,那么在真正有必要之前,我不太愿意升级。
【讨论】:
【参考方案5】:我们在多步骤过程中进行了升级,对此我感到非常满意。 Question 中的应用程序大约有 100.000 LoC,并运行多个核心业务功能,并与遗留系统有很多接口。我们是这样工作的:
-
更新到 django 0.97-post unicode
合并。修复所有 unicode 问题
将应用程序重构为
可重用的应用程序,添加测试。这给我们留下了
主应用程序/项目中的 40.000 LoC
升级到 django 0.97-post autoexcape 合并。修复3中创建的可重用应用中的自动转义。然后修复mian应用程序中剩余的自动转义问题。
升级到 1.0。剩下的主要是修复管理问题。
整个过程花了大约 6 个月的时间,我们在服务器上运行旧版生产分支,同时将另一个分支移植到 1.0。在这样做的同时,我们还向生产分支添加功能。
最终的合并比预期的要少得多,4 名编码人员花了大约一周的时间进行合并、审查、测试和修复。然后我们推出了,大约有一周的时间被以前意想不到的错误所困扰。
总的来说,我对结果很满意。我们现在有一个更好的代码库以供进一步开发。
【讨论】:
以上是关于从 Django 0.96 升级到 1.0 的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
将 Google App Engine 应用程序从 Django 0.96 迁移到 Django 1.2
GAE/Django 模板 (0.96) 过滤器以获取 GqlQuery 的长度并对其进行过滤