7

我们有一个相当简单的基于 Django 的网站来进行 CRUD 操作。我一直在本地进行测试和开发,然后在测试完成后将版本和数据库架构更改检查到实时服务器上。我们最近在发布某些类型的更改时遇到了问题。想象以下事件序列:

  1. 用户打开 Web 表单
  2. 网站已更新以要求此表单上的新字段
  3. 用户提交他们一直在处理的表单
  4. 服务器返回错误,因为它希望接收在步骤 2 中添加的新字段

其他网站如何处理此类问题?我的想法:

  • 在进行更新时使站点脱机。这并不能真正解决问题,因为用户在提交之前可能会无限期地打开 Web 表单,但是在一定时间之后,任何人都不太可能提交表单。
  • 在非常低的流量时间进行自动更新。同样,这并不能真正解决问题,但我们的网站并不那么受欢迎,如果我们在凌晨 3:00 进行更新,我怀疑会有很多用户。这种技术的一个问题是自动更新失败。
  • 对表单进行版本控制,以便服务器识别正在提交的旧表单并提供对用户更友好的响应。是否有自动化工具可以帮助解决这个问题?

想法?

4

5 回答 5

2

更改已发布的 API(或 UI,在这种情况下)总是很棘手。如果可能,请保持向后兼容性。对于大多数形式,我认为功能不会在版本之间发生变化。您可以添加或删除一两个字段,但这将由后端的表单验证处理。这基本上就是您在第 4 步中所描述的内容。我真的不认为这是什么大问题。运行时错误不时发生——只要您的应用程序优雅地处理它并通知用户问题,那么真的没有问题。

于 2009-03-10T14:12:02.697 回答
1

如果这确实是一个大问题,您可以将代码版本作为某种隐藏变量包含在每个表单中。如果提交的版本与当前运行的应用程序版本不匹配,您可以显示适当的错误,并让他们填写表单上可能存在的任何新字段。您甚至可以更进一步,只显示表单已更改的消息。可能根据表单的定义创建某种散列,并将其用作隐藏字段。如果哈希错误,您就知道他们提交的表单不正确。

于 2009-03-10T14:02:02.380 回答
0

做到这一点的“正确”方法是拥有定义明确的视图来优雅地处理整个故障类别。如果需要向模型添加一个新字段(我假设这是正在发生的事情),视图应该使用 ValidationError 异常处理该异常,该异常会引发友好的错误消息并将用户发送回表单( ,重新加载时,应该有可用的新字段)。无论向模型添加什么字段,异常都会抛出一个干净的错误并将用户返回。

于 2009-03-10T18:54:14.143 回答
0

如果没有在验证中编码发生更新的可能性,我看不出如何实现这一点。例如。“预期”该字段在提交时可能已更改,并相应地设置默认值/拒绝。

随着维护窗口的临近,如何“缩减”提交内容,以最大限度地减少那些让浏览器保持打开状态的用户?

于 2009-03-10T13:57:46.930 回答
0

我使用的许多网站(当然,主要是在我的工作地点内部)都宣布了类似“我们将在本周末从周六下午 6:00 到周日早上 6:00 进行维护。请计划那时离开系统。” 虽然它并不完美,但没有什么是完美的,这似乎是一个好方法。只需腾出足够的时间来推出新的东西,对其进行测试,并在需要时回滚到旧的。如果您觉得有必要,您总是可以设置一个简单的页面,上面写着“抱歉,我们现在不可用”,并在停机期间将人们引导至该页面。一般来说,如果你不需要你最初所说的所有时间并且你早早回来,没有人会抱怨(也许那些想要借口逃避工作的懒鬼是个例外,但他们

于 2009-03-10T14:32:57.407 回答