2012-06-07 73 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的方法裝飾基類的觀點。

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

現在,正如上面所說的,你可能想太多修改桌面應用程序!