2015-10-13 40 views
0

我想爲項目添加一個「Last seen」網址列表,以便用戶請求的最後5篇文章可以顯示在列表中,供所有用戶使用。 我讀過中間件docs,但無法弄清楚如何在我的情況下使用它。 我需要的是一箇中間件的簡單工作示例,該中間件捕獲請求以便保存和重用它們。如何在django中保存最新的url請求?

+0

爲什麼你想在中間件中做到這一點?我不確定這是最好的地方。 – albar

+0

@albar我願意接受所有建議來完成這項任務。其實我更喜歡一種觀點,因爲我不熟悉中間件寫作。 – Jand

回答

1

嗯,不知道我是否會用中間件來做,或者是一個裝飾者。但作爲你的問題是關於中間件,在這裏我的例子:

class ViewLoggerMiddleware(object): 
    def process_response(self, request, response): 
     # We only want to save successful responses 
     if response.status_code not in [200, 302]: 
      return response 

     ViewLogger.objects.create(user_id=request.user.id, 
      view_url=request.get_full_path(), timestamp=timezone.now()) 

顯示前5將是類似的;

ViewLogger.objects.filter(user_id=request.user.id).order_by("-timestamp")[:5] 

注:代碼沒有測試,我不確定是否status_code是一個真正的響應屬性。另外,您可以更改有效狀態碼的列表。

+0

感謝您的解決方案。但是,這個問題會記錄所有請求,包括對我不想保存的網址的請求。我只想限制請求某些內容(例如'/ articles/*'和'/ posts/*')。你會怎麼做沒有中間件? – Jand

+1

正如我所說,你可以修改你自己的裝飾器功能,並將它放在你想監視的功能上面。另一個「簡單」選項是向request.path中的中間件「if」/ articles /「添加額外的if。 – Blackeagle52

相關問題