Я хотел бы добавить в проект «Последний увиденный» список URL-адресов, так что последние 5 статей, запрошенных пользователями, могут отображаться в списке для всех пользователей. Я прочитал промежуточное ПО docs, но не смог понять, как его использовать в моем случае. Мне нужен простой рабочий пример промежуточного программного обеспечения, которое захватывает запросы, чтобы их можно было сохранить и использовать повторно.Как сохранить последние запросы на URL в django?
ответ
Хмм, не знаю, смогу ли я сделать это с помощью промежуточного программного обеспечения или справа от декоратора. Но так как ваш вопрос о промежуточном ПО, здесь мой пример:
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 является реальным атрибутом ответа. Кроме того, вы можете изменить свой список действительных кодов состояния.
Спасибо за ваше решение. Однако у этой проблемы есть проблема, которая регистрирует весь запрос, включая запрос на URL-адреса, которые я не хочу сохранять. Я просто хочу ограничить запрос определенным контентом (например, '/ articles/*' и '/ posts/*'). Как бы вы это сделали без промежуточного ПО? – Jand
Как я уже сказал, вы можете направить свою декоративную функцию и поместить ее выше fuctions, которую хотите контролировать. Другой «простой» вариант заключается в добавлении дополнительного, если для промежуточного программного обеспечения «if»/articles/«in request.path». – Blackeagle52
Почему вы хотите сделать это в промежуточном программном обеспечении? Я не уверен, что это лучшее место. – albar
@albar Я открыт для всех предложений для выполнения этой задачи. На самом деле я предпочитаю просмотр, поскольку я не знаком с написанием промежуточного программного обеспечения. – Jand