【问题标题】:Django - counting model instance views (for a "top entries" app)Django - 计算模型实例视图(用于“顶级条目”应用程序)
【发布时间】:2010-10-27 16:43:43
【问题描述】:

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

【问题讨论】:

    标签: django django-models django-views django-middleware


    【解决方案1】:

    你可以创建一个通用的 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')
    

    在你的 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,
            })
    

    这种方法让您不仅可以计算点击次数,还可以按时间、内容类型等过滤点击历史记录...

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

    【讨论】:

      【解决方案2】:

      查看 request.path 的中间件很难看,因为它引入了对用于显示文章和博客文章的 URL 模式细节的依赖。如果您不介意这种耦合,那么您不妨保存性能损失并在网络服务器日志文件上进行分析。 (编辑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(...
      

      或在您的 URLconf 中:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-03
        • 2020-05-10
        • 2022-01-04
        • 2020-01-16
        • 1970-01-01
        • 2011-12-22
        相关资源
        最近更新 更多