2012-05-13 31 views
0

我不是新來的Django(1Y工作經驗),但我有一個奇怪的任務,我無法處理。 所以我必須編寫寫中間件來計算請求,但只有那些未被客戶端中止的中間件(那些在瀏覽器中完全呈現的中間件)。計數完全呈現請求

我發現當客戶端中止連接時,服務器(Python)拋出errno 32 Broken Pipe,因爲它來自socket的不成功寫入[我認爲連接服務器客戶端在那裏是TCP,所以沒有什麼奇怪的]。

但問題是,我無法找到一個方法來檢查,如果瀏覽器完全呈現頁面或檢查,如果發生錯誤(當然是錯誤可以有另一種起源但它是一個良好的開端)。

噢噢噢,我不希望使用JS(與JS是小菜一碟),但我可以使用HTML5(如果它可以幫助...)

+0

你可以嘗試把網絡錯誤(1 x 1像素)圖像在的最底部頁。也許可以通過'view()'來加載它(而不是來自你的靜態服務器)。不能保證該頁面在此時已經100%渲染,但它應該大部分完成。既然你沒有提到JS的檢查,那麼我認爲你沒有使用任何JS的頁面本身。 –

+0

是的,我在想這件事(我已經這樣做了,但我不確定這是我的'客戶'想要的。他說中間件... –

+0

這聽起來像你的客戶可能正在做我稱之爲「over speccing」的事:通過指定期望的最終結果*和*如何實現它。假設這不是一項家庭作業,它可能是與你的客戶坐下來,澄清*期望的最終結果*的好時機,然後在如何實現它的技術上宣稱一些技術上的獨立性。 –

回答

0

我可能已經找到了答案,你的問題,那就是execute some code when the HTTPResponse has been sent。然後,您可以在頁面完全發送給客戶端後遞增所需內容。

示例子類的HttpResponse和在視圖中明確地返回派生類的一個實例。如果你有很多的觀點,你不希望覆蓋,也許你可以試試你的子類定義下這段代碼

HttpResponse.__bases__ += (FullLoggingHttpResponse,) 
+0

看起來很有希望,我會在稍後檢查。如果有效,我會接受。關於你陳述的問題,我認爲裝飾者會做這項工作。 –