Django-计算模型实例视图(用于“top entries”应用程序)

Django-计算模型实例视图(用于“top entries”应用程序),django,django-models,django-views,django-middleware,Django,Django Models,Django Views,Django Middleware,我是新来的,很困惑。我想创建一个模块来跟踪文章和博客模型的“热门”实例。我不想触及文章或博客模型的代码。这是中间件的候选者吗?查看HttpRequest.path?中间件查看request.path很难看,因为它引入了对用于显示文章和博客文章的URL模式细节的依赖。如果您不介意这种耦合,那么您最好保存性能影响并对Web服务器日志文件进行分析。(EDIT:这将是一个更好的选择,因为它为您提供了可调用的视图及其参数。我仍然更喜欢decorator方法,因为它不会在不相关的视图上产生开销,但是如果您不

我是新来的,很困惑。我想创建一个模块来跟踪文章和博客模型的“热门”实例。我不想触及文章或博客模型的代码。这是中间件的候选者吗?查看
HttpRequest.path

中间件查看request.path很难看,因为它引入了对用于显示文章和博客文章的URL模式细节的依赖。如果您不介意这种耦合,那么您最好保存性能影响并对Web服务器日志文件进行分析。(EDIT:这将是一个更好的选择,因为它为您提供了可调用的视图及其参数。我仍然更喜欢decorator方法,因为它不会在不相关的视图上产生开销,但是如果您不想为博客/文章应用程序使用URLconf,视图中间件可以工作)

我会使用一个视图装饰器,您可以围绕对象的细节视图(或您的自定义等效视图)进行包装。您可以直接在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(...
或者在您的URLconf中:

url(r'^/blog/post...', count_hits(detail_view))

你可以创建一个通用的命中模型

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')
在your view.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,
        })
这种方法不仅可以计算点击次数,还可以按时间、内容类型等过滤点击历史

由于命中表可能正在快速增长,您应该考虑删除策略