【问题标题】:How to check if the user is visiting the page for the first time如何检查用户是否是第一次访问该页面
【发布时间】:2013-03-19 23:02:18
【问题描述】:

一般来说,我们如何知道用户是否是第一次访问该页面?从技术上讲,我们是否将每个页面的访问次数存储在模型中(我正在使用 django),或者是否有其他一些我可以遵循的模式来简化操作。

我只是在寻找实现这一点的设计。

【问题讨论】:

  • 使用用户模型字段 date_joined
  • 用户加入日期与页面访问量有何关系?
  • 加入日期存储用户第一次注册的日期和时间,最后一次登录存储用户最近登录的日期和时间。如果你能想象你可以为你的问题创建一个逻辑(条件)。但如果你不能,没关系。
  • @catherine 非常感谢您提供的信息,我很想尝试一下。但我猜如果我触摸模型,会有更好的解决方案。
  • 不,你可以在你的视图中创建 if 和 else 语句

标签: django design-patterns django-models


【解决方案1】:

我认为您必须为此创建自己的机制。

我会创建一个模型来存储每个 url 和用户的首次访问,例如 FirstVisit。然后,如果用户请求视图中的页面,您可以搜索 FirstVisit 中是否有当前用户和 url 的条目,并确定这是否是他的第一次。之后,如果他还没有访问过,你将条目存储到FirstVisit 模型中,因为他只是要获取页面的内容。

我会尝试编写代码:

#models.py

class FirstVisit(models.Model):
    url = models.URLField()
    user = models.ForeignKey('auth.User')


#views.py

def my_view(request):
   if not FisrtVisit.objects.filter(user=request.user.id, url=request.path).exists():
      #he visits for the first time
      #your code...
      FisrtVisit(user=request.user, url=request.path).save()

您可以创建一个装饰器并将此功能放入其中。然后将装饰器添加到您要存储此信息的任何视图中,并从装饰器将标志参数传递给视图,以确定用户是否第一次在那里。

【讨论】:

    【解决方案2】:

    按照@davekr 的建议,我将创建一个像 FirstVisit 这样的模型,其中包含一些属性,如 ip-address、时间注册并在 get 方法(与根 url 绑定)上实例化它,如果用户是有效的或者已通过身份验证。

    PS:检查此 (https://docs.djangoproject.com/en/2.0/ref/request-response/) django 文档以识别您可能对构建 FirstVisit 感兴趣的请求属性。

    【讨论】:

      猜你喜欢
      • 2013-05-29
      • 1970-01-01
      • 2015-09-27
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多