2013-07-30 143 views
0

我正在構建一個Django Web應用程序,它允許用戶從計算機系統中選擇一張照片並保持填充到用戶時間軸上。時間線最初將顯示10張照片,然後進行拉取以刷新時間線上的下10張照片。Django Cache + Django數據庫請求

所以我的第一個問題是我能夠上傳圖像獲取存儲在文件系統上,但我怎麼只顯示前10,然後刷新刷新下一個10等等。

接下來,我希望應用程序的用戶體驗更快。所以,我正在考慮緩存。所以,我在想,我緩存什麼。由於在Django- Database cache, MemCache, or FileSystem Caching中有3種類型的緩存。 所以我的secon問題是我應該緩存每個用戶的頭10張照片還是其他東西?

請回答您的建議。

回答

1

所以我的第一個問題是我能夠上傳獲取存儲在文件系統上的圖像,但是如何僅顯示前10個圖像,然後再刷新以獲取下一個10等等。

以您的初始邏輯取第一個10,按照時間順序獲取下一張照片。你必須有一些與你的照片發佈有關的時間戳。根據它來獲取圖像。你可以使用Django Paginator

做什麼我緩存

無論靜態數據要顯示給用戶的頻繁,不會馬上改變。您可以緩存每個用戶或所有用戶。根據你選擇緩存的內容。

我應該緩存第10張照片的每個用戶或別的東西

取決於你的。這些第一張照片是否爲所有用戶所共有?然後你可以緩存。如果不是,並且這些圖片是依賴於用戶的,則沒有必要緩存它們。用戶將無論如何都必須獲取第一個圖像。我非常懷疑用戶會不斷要求同樣的前10張照片。再次,這是你的邏輯。如果您認爲緩存將有所幫助,則可以繼續並緩存。

+0

好的和關於緩存部分的信息性指南,但我有一個查詢獲取下10個圖像。我在我的views.py文件'documents = Document.objects.filter(owner = request.user)[page_no:page_no + 5]''中有這個聲明。 page_no最初從「0」開始。我在我的模板中有一個「下一個」按鈕,它將獲取我下一個10張照片。所以,我正在考慮使用jQuery + AJAX。那麼,我將如何通過jQuery發送數據,說明應該顯示哪一組圖片,即11-20或21-30或31-40等等。 – PythonEnthusiast

+1

你也可以使用Django自己的'Paginator' –

1

DiskCache項目最初是爲類似問題(緩存圖像)而創建的。它包含一些功能,可以幫助您高效地緩存和提供圖像。 DiskCache是​​Apache2許可的磁盤和文件支持緩存庫,採用純Python編寫,並與Django兼容。

diskcache.DjangoCache提供了一個兼容Django的緩存界面,並帶有一些額外的功能。特別是,getset方法允許讀取和寫入文件。舉個例子:

from django.core.cache import cache 

with open('filename.jpg', 'rb') as reader: 
    cache.set('filename.jpg', reader, read=True) 

之後你可以到文件的引用:

reader = cache.get('filename.jpg', read=True) 

如果你只是想在磁盤上的文件名(在緩存):

try: 
    with cache.get('filename.jpg', read=True) as reader: 
     filename = reader.name 
except AttributeError: 
    filename = None 

上面的代碼請求緩存中的文件。如果沒有這個值,它將返回NoneNone將導致with聲明引發異常,因爲它缺少__exit__方法。在這種情況下,捕獲異常並將filename設置爲None

使用文件名,您可以使用類似X-Accel-Redirect的內容告訴Nginx直接從磁盤提供文件。