我是新来的,感到困惑。我想创建一个模块,用于跟踪文章和博客模型的“热门”实例。我不想触摸文章或博客模型的代码。这是中间件的候选人吗?看着HttpRequest.path
?Django - 计数模型实例视图(对于“顶级条目”应用程序)
0
A
回答
1
查看request.path的中间件很难看,因为它引入了对用来显示文章和博客文章的URL模式细节的依赖。如果你不介意这种耦合,那么你可能只需保存性能点击并在Web服务器日志文件上进行分析即可。 (编辑: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))
0
,你可以创建一个通用的打击模型
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,
})
这种方法给你的权力,不仅要算命中,但时间筛选命中的历史,则contentType等的意见on ...
由于命中表可能正在快速增长,因此您应该考虑删除策略。
代码未经测试
相关问题
- 1. Laravel顶级应用实例
- 2. Django查询顶级模型
- 3. 用于多视图应用程序的knockoutjs模式示例
- 4. Django视图,模型,表单,应用程序命名
- 5. MvvmCross:应用程序宽视图模型?
- 6. 在模块级别公开Django应用程序的模型
- 7. 如何在django的视图中使用多个模型实例?
- 8. Django模型实例full_clean方法,对吗?
- 9. 模板,视图和模型应该放在Django配置应用程序中吗?
- 10. “墙”型应用程序Django模型设计
- 11. Django模型实例Hashable?
- 12. Django - 单一模型实例
- 13. Django编辑模型实例
- 14. Django-rest-framework序列化程序无法保存模型实例
- 15. Python应用程序设计模式 - 实例必须适用于大多数其他实例
- 16. 跨应用程序使用django模型?
- 17. 实用程序应用程序和基于视图的应用程序
- 18. 概念视图模型/模型验证的应用程序了
- 19. 高级Django应用程序
- 20. 在一个顶级的Django目录定义模型
- 21. 获取对视图模型当前实例的引用
- 22. Django的 - 评级模型的实例的DetailView模板
- 23. 从父数据实例化django模型
- 24. django模型实例的递归函数
- 25. Django的查询:与FK对象的计数数量模型实例
- 26. 如何使用顶级应用程序中的实例化信息创建低级对象?
- 27. 在Django中,由于FK在第二个(和基于视图)模型中无法删除模型实例
- 28. 使用视图模型添加模型的多个实例
- 29. 模型记录/实例特定视图
- 30. 多实例视图模型和ViewModelLocator