Я новичок и смущен. Я хочу создать модуль, который отслеживает «лучшие хиты» экземпляров как статьи, так и модели блога. Я не хочу касаться кода для моделей статей или блога. Является ли это кандидатом для промежуточного программного обеспечения? глядя на HttpRequest.path
?Django - просмотр экземпляров экземпляров модели (для приложения «верхние записи»)
ответ
Среднее ПО, смотрящее на request.path, является уродливым, так как оно вводит зависимость от деталей шаблонов URL, используемых для отображения статей и сообщений в блогах. Если вы не возражаете против этой связи, тогда вы можете просто сохранить удар производительности и провести анализ в файлах журналов веб-сервера. (EDIT: view middleware будет лучшим вариантом, так как он дает вам возможность вызова и его аргументы. Я бы предпочел подход декоратора, поскольку он не наносит лишних накладных расходов на несвязанные виды, но просмотр промежуточного программного обеспечения будет работать, если вы не хотите коснуться URLconf для приложений для блога/статьи).
Я бы использовал декоратор, который вы обертываете вокруг объекта object_detail (или ваш собственный эквивалент). Вы можете сделать эту упаковку непосредственно в URLconf. Что-то вроде этого:
def count_hits(func):
def decorated(request, *args, **kwargs):
# ... find object and update hit count for it...
return func(request, *args, **kwargs)
return decorated
И вы можете применить его в views.py:
@count_hits
def detail_view(...
или в привязок:
url(r'^/blog/post...', count_hits(detail_view))
вы могли бы создать общую модель Hit
class Hit(models.Model):
date = models.DateTimeFiles(auto_now=True)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
на ваш взгляд.py вы пишете эту функцию:
def render_to_response_hit_count(request,template_path,keys,response):
for key in keys:
for i in response[key]:
Hit(content_object=i).save()
return render_to_response(template_path, response)
и мнение, что вы заинтересованы в возвращении
return render_to_response_hit_count(request, 'map/list.html',['list',],
{
'list': l,
})
Этот подход дает вам возможность не только рассчитывать на удар, но фильтровать хит-историю по времени, ТипСодержимые и так на ...
Поскольку стол-стол может быстро развиваться, вы должны подумать о стратегии удаления.
Код непроверенный