2012-06-07 52 views
1

我有一个桌面应用程序发送POST请求到Django应用程序存储结果的服务器。 DB服务器和Web服务器不在同一台机器上和它发生,有时连接丢失了一些要求在很短的时间,但会导致连接错误:Django:如何正确处理数据库连接错误

OperationalError: (2003, "Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (110)")

在一个“正常”的网站,我猜您不必担心太多:浏览器显示500错误页面,访问者稍后再尝试。 在我的情况下,放弃请求发布的信息不是一个选项,我想知道如何处理这个?我试图捕捉这个异常,等待连接回来(滞后不是问题),然后继续这个过程。但是由于代码中的任何地方都可能发生异常,所以我有点卡在如何继续。

感谢您的建议。

+0

桌面应用程序是否也是Django应用程序?如果没有,为什么这个问题标记为python/mysql/django?请详细说明客户端堆栈。 –

+0

没有桌面应用程序是建立与本机代码(C++),并已部署,没有任何东西可以在那边做了(这本来是肯定更好的解决方案)。现在不可能在服务器上做些什么吗? – Ponytech

+0

OK,你在谈论的Web服务器<-> DB连接,而不是桌面<-> Web服务器的连接。得到它了。 –

回答

1

你可以做your own WSGI application,将装饰Django的WSGI应用,yourproject/wsgi.py。

如果您的wsgi应用程序装饰器没有从装饰的应用程序获得可接受的结果,它可能会稍等片刻,然后再试。

但实际上,您应该修复客户端。客户端不应期望连接到一个工作服务器24/7。在那之前,我不会把这个桌面客户端作为用户。

1

您可以使用带有process_view方法的中间件和try/except封装您的调用。

或者你可以装饰你的意见,并在那里打电话。

或者你可以使用基于类,具有在其调度方法,或overriden.dispatch的方法装饰基类的观点。

真的,你有很多解决方案。

现在,正如上面所说的,你可能想太多修改桌面应用程序!