5

使用谷歌分析注册时,需要将一段 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>

一直存在的问题是,开发机器会提交不是来自真实用户的不必要数据。我想知道是否有办法询问烧瓶是否处于调试模式,因此不要首先加载此脚本。

如何检查模板中的调试模式?

4

3 回答 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 %}

您还可以排除应用程序的管理员用户以影响分析,因为无论如何他们很可能会滥用它们。如果您实现了current_userFlask 方式,那么您的模板应更改为:

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

除其他外,以上所有内容(config.pymain.pyanalytics.html)都在我的gae-init项目中使用。

于 2013-07-02T21:56:47.623 回答
0

我的 Flask 网站也有类似的情况。我想为我的用户记录活动,但我不希望我自己作为管理员的活动进入 Analytics 并扭曲统计数据。

g.is_admin在我的before_request处理程序中添加了一个:

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

然后在模板中,我在适当的时候使用条件跳过 Analytics 代码:

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

根据您的环境的设置方式,您将需要提出一个可以区分开发机器和生产机器的条件。这可以像配置项一样简单,或者检查调试模式是否打开。

于 2013-07-02T18:39:49.170 回答
0

我没有对此进行测试,但我认为模板可以访问配置对象。因此,您可以尝试以下操作:

{% if not config['DEBUG'] %}
    <script> .... </script>
{% endif %}
于 2013-07-02T18:43:38.063 回答