比方說,我有一個頁面,我想呈現這將在幾個方面呈現一些(昂貴的計算)數據。例如,我想打我的數據庫並獲取一些大量的數據。然後,我想對這些數據進行分組,然後用Python進行操作(例如,使用Pandas)。說這個操作的結果是一些熊貓DataFrame
,我會打電話prepped_data
。說到這一點,一切都需要3秒鐘。 (即需要一段時間...)如何在單個URL上緩存數據以多種方式使用
然後,我想在一個URL(/summary
)總結這些數據:我想顯示一個條形圖,餅圖和一個HTML表格。這些元素中的每一個都取決於prepped_data
的子集。
我可以處理這個問題的一種方法是將3個獨立的視圖連接到3個獨立的URL。我可以製作pie_chart_view
這將使動態生成的餅圖在/piechart.svg
可用。我可以製作bar_graph_view
,這將在/bargraph.svg
上生成動態生成的條形圖。我可以通過渲染模板來完成summary_view
。該模板將使用由summary_view
本身生成的上下文變量來創建我的HTML表格。而且它還包括通過鏈接到模板內的URL的圖表。在這種結構中,所有3個視圖函數都需要獨立計算prepped_data
。這似乎不理想。
作爲替代方案。我可以打開某種緩存。也許我可以創建一個名爲raw_data_view
的視圖,這會使數據本身在/raw_data.json
處可用。我可以設置它來緩存自己(使用任何Django緩存後端)一小段時間(30秒?)。然後,其他每個視圖都可以訪問此URL來獲取他們的數據,這樣我就可以避免進行3次昂貴的計算。但是,這似乎有點冒險,因爲在設置緩存時間方面有一些真實的判斷。
另外一條路徑可能涉及在summary_view
內創建兩個圖形,並將圖形直接嵌入到呈現的HTML中(這可以通過.svg
來實現)。但是我不是那麼喜歡的,因爲你會發現笨重的HTML文件和圖形,這些文件和圖形很難讓用戶隨身攜帶。更一般地說,我不想承諾以這種格式來做所有的圖形。
有沒有一個普遍接受的架構來處理這類事情?
編輯:我是如何製作的圖表:
一個評論問我是如何做的圖表。大致說來,我在matplotlib
中這樣做。所以一旦我有我喜歡的代碼生成的Figure
,我可以很容易地將它保存到svg
。
看看[memoization](http://stackoverflow.com/questions/1988804/what-is-memoization-and-how-can-i-use-it-in-python)。這是一種非常通用的技術,可以用來緩存幾乎任何事情的計算結果。 –
如果你解釋你如何製作圖表,這將有所幫助。 –