在Django中,当表单有效时触发Google Analytics事件

9
我网站上有一个表单,其他表单以此为基础(并且位于不同的url),但它们都完成了同样的工作,即创建用户。
我想使用python/django在表单有效时向Google Analytics推送特定事件。
class FormBase(FormView):


    def form_valid(self, form): 


        #push to google analytics

        #_gaq.push(['_setAccount', 'UA-12345-1']);
        #_gaq.push(['_trackPageview', '/home/landingPage']);


        return super(FormBase, self).form_valid(form)

这个有可能实现吗?与客户端(JavaScript)相比,在服务器端实现是否存在任何注意事项?

2个回答

7
分析跟踪通常使用页面上的Javascript完成,而表单验证通常是服务器端的工作。您的示例似乎混合了Javascript和Python代码,这当然不起作用。通常情况下,您只需要在感谢页面上触发事件,使用常见的Javascript即可轻松实现。在Django中很容易做到,您只需小心每次使用该表单并验证后将用户发送到相同的感谢页面,在该页面上使用您构建的自定义模板,其中包含触发事件的代码。
使用测量协议可以在服务器端完成此操作。但是,有一些事情需要注意:

1)使用测量协议

测量协议仅定义HTTP请求,没有客户端库(至少没有官方的客户端库),因此您必须自己创建并运行查询。这将增加项目的复杂性,这实际上是不必要的。

2)迁移到Universal Analytics

在您的示例中,您似乎使用Classic Analytics。Google Analytics将其跟踪代码升级为称为Universal Analytics的新语法。测量协议仅支持Universal Analytics,因此,如果要使用测量协议,则还应将所有站点跟踪代码升级为Universal,以便从客户端/服务器端发送的请求与之兼容。

3)延迟

测量协议可能需要几毫秒才能回答。如果您要执行此操作数百万次,则等待HTTP响应可能会成为瓶颈,延迟您的例行程序。您可能希望使用celery或类似工具在异步任务中创建和发出此HTTP请求。

4)会话继续

Google Analytics在客户端使用cookie存储客户端ID,该ID用于理解它是跨多个请求的同一用户。因此,您需要使用相同的cid从服务器端发出请求。这将使GA将Javascript命中与用户在网站上执行的其他命中链接起来。因此,您需要获取_ga cookie,解析它并提取用于请求的cid。除了cid外,还要从实际用户中提取userIp和userAgent,并将其发送到使用测量协议的请求中,GA使用这些信息创建地理报告和浏览器/操作系统报告。
正如您所看到的,这是很多工作,也许如果您真的必须在服务器端跟踪它,那么这是值得的。但是,如果您不一定要这样做,最好还是坚持基本原则,只使用Javascript。

我发现使用Google标签管理器可以更轻松地完成这项工作。但是感谢您的详细解释! - Tomas Jacobsen

0

我发现使用这个库来实现测量协议是使用Python/Django实现服务器端Google Analytics事件最简单的方法。

代码如下:

from UniversalAnalytics import Tracker

tracker = Tracker.create('UA-XXXXXX-Y')
tracker.send('event', 'category', 'action')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接