Flask: 如何防止Google Analytics JS在开发环境中运行?

5

在注册Google Analytics时,需要将一段js脚本插入到base.html中。

<script>
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

      ga('create', 'xxx', 'example.com');
      ga('send', 'pageview');

    </script>

始终将其存在的问题是,开发机器会提交不来自真实用户的无用数据。我想知道是否有一种方法可以询问flask是否处于调试模式,从而在首次加载时不加载此脚本。

我如何在模板中检查调试模式?

3个回答

7

如果你还没有使用过,你应该创建一个名为config.py的文件,并将其加载到你的Flask应用程序中,可以像这样操作:

import config
app = flask.Flask(__name__)
app.config.from_object(config)

然后在 config.py 文件中,您可以编写以下内容:
# Running on App Enginge
PRODUCTION = os.environ.get('SERVER_SOFTWARE', '').startswith('Google App Engine') 
# Running Localy
DEVELOPMENT = not PRODUCTION
# You decide when is DEBUG mode, usually when running locally
DEBUG = DEVELOPMENT

然后在您的模板中,您可以像这样使用这些值:
{% if not config.DEBUG %}
  <script>
    ...
  </script>
{% endif %}

您还可以排除应用程序的管理员用户以影响分析,因为他们很可能会滥用它们。如果您按Flask方式实现了 current_user ,则应将模板更改为:

{% if not current_user.admin and not config.DEBUG %}
  <script>
    ...
  </script>
{% endif %}

除其他外,上述所有内容(config.pymain.pyanalytics.html)均用于我的gae-init项目。


1

我没有测试过,但我认为模板可以访问配置对象。所以你可以尝试类似这样的操作:

{% if not config['DEBUG'] %}
    <script> .... </script>
{% endif %}

0

我的Flask网站也有类似的情况。我想要为我的用户记录活动,但我不希望自己作为管理员的活动会被发送到分析中心,从而影响统计数据。

因此,我在before_request处理程序中添加了一个g.is_admin

@app.before_request
def before_request():
    g.admin = current_user.is_admin()

然后在模板中,我使用条件语句跳过适当的分析代码:

{% if not g.admin %}
    <script> ... </script>
{% endif %}

根据你的环境设置,你需要想出一个条件来区分开发和生产机器。这可能只需要一个配置项,或者检查是否启用了调试模式。

这仍然不是真正的好,因为您可能想在本地测试普通用户或未登录用户,而不将任何内容发送到分析中心。 - Lipis
正如我之前所说,你必须找到正确的条件来区分开发机和生产机。对我而言,这与管理员与非管理员有关,对你而言,可能是检查机器的主机名、IP地址或其他唯一标识你的开发机器的内容。 - Miguel Grinberg

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