Django:登录后调用一次函数

时间:2018-10-25 05:20:39

标签: python django

我在Django应用程序中实现了Segment.io。用户登录后,我必须拨打一次analytics.identify

目前,只要是{% if user.is_authenticated %},每次加载页面时我都会调用它。您是否知道用户登录后我只能调用一次?

<script type="text/javascript">
  {% if user.is_authenticated %}
    analytics.identify('{{ user.email }}', {
      'first_name': user.first_name,
      'last_name': user.last_name,
    });
  {% endif %}
</script>

3 个答案:

答案 0 :(得分:1)

我要实现的方式是:

  • 更改“登录”视图(调用身份验证和登录的视图)以返回页面,而不是重定向。
  • 此页面将具有您上面提到的script标签,以及元刷新重定向到主页(或您希望用户访问的任何地方)

答案 1 :(得分:0)

您可以在响应对象中设置一个cookie,以便在下一个页面加载中,如果设置了cookie,就可以避免呈现对analytics.identify的调用:

def view(request):
    template = loader.get_template('polls/index.html')
    context = {'user_unidentified': 'user_identified' not in request.COOKIES}
    response = HttpResponse(template.render(context, request))
    if 'user_identified' not in request.COOKIES:
        response.set_cookie('user_identified', '1')
    return response

然后在您的模板中:

<script type="text/javascript">
  {% if user_unidentified %}
    analytics.identify('{{ user.email }}', {
      'first_name': user.first_name,
      'last_name': user.last_name,
    });
  {% endif %}
</script>

答案 2 :(得分:0)

您可以为此使用django信号。将此代码放入模型中。

from django.contrib.auth.signals import user_logged_in

def do_stuff(sender, user, request, **kwargs):
    whatever...

user_logged_in.connect(do_stuff)

有关更多信息,请查看 https://docs.djangoproject.com/en/dev/ref/contrib/auth/#module-django.contrib.auth.signalshttp://docs.djangoproject.com/en/dev/topics/signals/

原始答案:https://stackoverflow.com/a/6109366/4349666