我们正在为我们的论坛制作一个游戏化组件,该论坛正在Django中开发。我们希望用户在达到某些目标后立即收到徽章。但是,我们担心将要进行的数据库查询量。例如,如果帖子获得一定数量的观看次数,请带上徽章。如果每次查看帖子时都会检查徽章的条件,则会进行大量查询。我们唯一的其他选择是以特定间隔或其他事件进行检查,例如用户查看其个人资料?从用户的角度来看,这将是不太理想的,因为延迟。
答案 0 :(得分:0)
有一种不同的方法可能适合您,使用网络服务器日志记录和后期处理来记录生成统计信息。我在Apache中使用它,其中一些项目需要查看网页浏览次数。其他Web服务器的类似配置也可以使用。
我使用 django.contrib.contentypes 来记下此示例中访问的对象的内容类型ID和对象ID,但您当然可以记录您想要的任何内容。
因此,在您的Apache虚拟主机配置文件中,添加如下的LogFormat指令:
LogFormat "%{X-H-CID}o|%{X-H-OID}o" hitcounter
然后将其附加到CustomLog:
CustomLog path/to/your/logfile.log hitcounter
这将使Apache能够将以下HTTP标头写入日志文件:X-H-CID和X-H-OID,它们代表被击中对象的ContentType ID和Object ID。从视图中,您可以将标题添加到HttpResponse:
ctxt = RequestContext(request)
rendered = render_to_string(template, ctxt)
http_res = HttpResponse(rendered)
http_res['X-H-CID'] = content_type_id
http_res['X-H-OID'] = object_id
将content_type_id和object_id替换为您的真实对象道具。
此示例应编写如下行:
16|4353
其中16是内容类型ID,4353是对象ID。最后,您可以安排django custom命令来处理该日志文件并执行所需的操作。