将python桌面应用程序转换为Web应用程序时的状态考虑因素?

时间:2014-08-22 10:35:58

标签: python django apache web-applications desktop-application

我很困惑将桌面应用程序转换为Web应用程序时应该考虑哪些因素。我们有一个用python编写的桌面应用程序,使用用于GUI的wxPython库,它是一个非常传统的应用程序,它设置主窗口并调用app.Mainloop()方法来维持GUI并响应事件。应用程序本身是一个配置实用程序,它只接受文件并允许用户配置它。当然,程序会跟踪所做的所有更改,并根据这些更改来响应事件。

我打算使用托管在Apache服务器上的Django框架将此实用程序作为更大应用程序的一部分提供服务,并期望许多用户同时使用它。按照预期删除app.MainLoop()指令后,运行应用程序只需执行一次代码并退出。这显然不是我需要的,应用程序需要记住状态。

到目前为止,我已经开始从应用程序的核心识别和解耦所有GUI代码,因此我可以有效地重用核心,并决定使用jQuery等框架在JavaScript中编写UI来处理GUI事件等。存储状态的两个显而易见的选项是sessionsdatabases,但是我在形成一个关于如何工作的全局图时有点卡住了。在Django视图方面,请求之间会发生什么?如果有人能够对整体工作流程有所了解,我将非常感激。

谢谢。

1 个答案:

答案 0 :(得分:1)

这个问题有点模糊:一些细节,甚至一些代码,都会有所帮助。

将此作为桌面应用程序运行并在Web上运行它有两个不同的区别。缺乏状态是一个问题,但似乎更重要的区别是每用户配置。您需要某种方式为每个用户存储该配置。

你放在哪里取决于你想要它的持久性:会话非常适合需要持续用于实际会话的事情,即用户一次性主动使用应用程序的时间,但不要#如果用户从新机器登录,则必须持久保存。否则,将其显式存储在附加到用户记录的数据库中是一个很好的方法。

就"请求与#34;之间发生的事情而言,Bruno指出的答案是"没有"。每个请求实际上都是一个空白状态:保持状态的唯一方法是使用cookie,该cookie由会话框架抽象。您绝对不想做的是尝试在您的应用中保留任何类型的全局或模块级每用户状态,因为这无法工作:任何州都是全球性的,因此适用于所有州用户,因此显然不是你想要的。