为了账号安全,请及时绑定邮箱和手机立即绑定

使用最新版本创建新站点或使用旧站点

使用最新版本创建新站点或使用旧站点

至尊宝的传说 2022-05-19 19:00:47
我正在进行的项目基于 Django 1.4,实际上我无法更改/更新它。我必须使用 API 来修改该站点上的数据。我以为我会使用 Django Rest Framework 来做到这一点。如果我使用 Django 3.X 和 DRF 的最新版本从头开始一个新站点,使用与最旧站点相同的数据库,会有问题吗?我的意思是,如果通过在新站点上使用 API 我更改数据库上的数据,这也会在“旧”站点上更改?另一方面,我可以继续在“旧”站点上工作并使用旧版本的 DRF,但这些版本不太完整,文档较少且安全性较低。
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

这听起来像是启动迁移项目到受支持且安全的 Django 版本的绝佳机会。始终使用 LTS 版本:2.2 是最新的 LTS 版本,3.x 尚未发布。

您需要从旧应用程序中复制模型并设置managed = False,访问与旧项目相同的数据库以使用新 API 修改数据。

一旦您的 API 可以处理网站所需的所有功能,迁移整个网站将非常容易。

请注意以下事项:

  • 新项目中的模型需要使用相同的数据库表和列,具有相同的字段类型。但是没有什么能阻止你重命名实际的模型和字段(如果你觉得旧项目使用“坏”的命名约定),只要你指定db_column(在字段上)和db_table(在模型上)让 Django 知道映射到现有的数据库。

  • 您可以将新模型和表添加到现有数据库(使用managed = True),而不会影响旧应用程序。

如果在某个阶段您需要修改现有表:

  • 然后,您可能会考虑切换到managed = True(并将旧应用程序更改为managed = False),确保在此之前您已从数据库中清除迁移表,然后使用fakeset 运行迁移(以免实际迁移任何内容)。如果不再维护旧应用程序,我会这样做。

  • 如果仍然维护旧应用程序,那就有点棘手了。您可能必须直接在 SQL 中进行数据库更改。

  • 不会影响旧应用程序的更改:添加新列。

  • 将影响旧应用程序的更改:限制约束、添加约束或更改数据类型的任何内容。

  • 可能影响旧应用程序的更改:放松约束。这不会影响您数据库中的现有数据,但它可能会触发旧应用程序的验证器,这些验证器需要某种格式的数据并为新数据获取“无效”数据。


查看完整回答
反对 回复 2022-05-19
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信