2015-10-13 3 views
0

Я хотел бы добавить в проект «Последний увиденный» список URL-адресов, так что последние 5 статей, запрошенных пользователями, могут отображаться в списке для всех пользователей. Я прочитал промежуточное ПО docs, но не смог понять, как его использовать в моем случае. Мне нужен простой рабочий пример промежуточного программного обеспечения, которое захватывает запросы, чтобы их можно было сохранить и использовать повторно.Как сохранить последние запросы на URL в django?

+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

Спасибо за ваше решение. Однако у этой проблемы есть проблема, которая регистрирует весь запрос, включая запрос на URL-адреса, которые я не хочу сохранять. Я просто хочу ограничить запрос определенным контентом (например, '/ articles/*' и '/ posts/*'). Как бы вы это сделали без промежуточного ПО? – Jand

+1

Как я уже сказал, вы можете направить свою декоративную функцию и поместить ее выше fuctions, которую хотите контролировать. Другой «простой» вариант заключается в добавлении дополнительного, если для промежуточного программного обеспечения «if»/articles/«in request.path». – Blackeagle52