我如何通过 ip 为匿名用户计算 django 中的视频观看次数

Posted

技术标签:

【中文标题】我如何通过 ip 为匿名用户计算 django 中的视频观看次数【英文标题】:How I can count the video views in django by ip for Anonymous users 【发布时间】:2021-07-11 03:30:15 【问题描述】:

我创建了一个视图来获取匿名用户 IP,我想当这个用户什么视频然后注册这个 ip 已经观看了视频,我知道它现在很有效,因为用户可能使用不同的网络,

这是我的 ip 用户模型:

class UsersByIP(models.Model):
  ip_user = models.GenericIPAddressField()
  def __str__(self):
     return self.ip_user

这个模型通过ip在vdeo和观众数量之间建立关系

class Video(models.Model):
     viewers_by_ip = models.ManyToManyField(UsersByIP, default='192.168.0.1', blank=True)

我创建了这个视图来将 ip 注册为视图,但是我得到了这个错误:

Field 'id' expected a number but got '127.0.0.1'

我无法解决。

观点:

       num_views_by_ip = Video.objects.annotate(
                num_views_ip=Count('viewers_by_ip'),
            ).order_by('-viewers_by_ip')
            data = get_object_or_404(num_views_by_ip, pk=pk)
            ip_user = UsersByIP(ip_user=request.META.get('REMOTE_ADDR'))
            if not request.user.is_authenticated:
                __, created = Video.viewers_by_ip.through.objects.get_or_create(
                    video=data,
                    usersbyip=request.META.get('REMOTE_ADDR')
                )

                if created:
                    data.num_views_by += 1

我想获得解决此视图或制作新视图(逻辑)的任何建议

【问题讨论】:

正在存储ip of Deviceid of internet providerip of site 【参考方案1】:

您尝试以这种方式指定模型 UsersByIP usersbyip=request.META.get('REMOTE_ADDR')usersbyip 期望模型的 id 或模型实例本身不是模型的字段。您应该将您的 ip_user 变量传递给它(确保已保存):

ip_user, created = UsersByIP.objects.get_or_create(ip_user=request.META.get('REMOTE_ADDR'))
if not request.user.is_authenticated:
    __, created = Video.viewers_by_ip.through.objects.get_or_create(
        video=data,
        usersbyip=ip_user
    )

【讨论】:

谢谢先生,我的工作很好,你是救命稻草 @Abdul Aziz Barkat - 它正在存储 ip of Deviceid of internet providerip of site @Progam 这真的取决于使用情况。如果REMOTE_ADDR 之间有代理,将提供最后一个代理而不是用户。还有HTTP_X_FORWARDED_FOR可以使用。为了能够可靠地获取用户的 IP 地址,最好使用一些知道自己在做什么的第三方包,例如:django-ipware 我认为 ip of device 在本地主机中将是 127.0.0.1:8000。我对吗 ?那么如何才能在本地主机上测试呢? @Progam 这个问题 (How to access the local Django webserver from outside world) 如果你想测试这个问题会对你有帮助

以上是关于我如何通过 ip 为匿名用户计算 django 中的视频观看次数的主要内容,如果未能解决你的问题,请参考以下文章

django - 如何通过浏览器 IP 获取位置

如何使用 webrtc 让我的用户保持匿名?

Django JWT 身份验证 - 用户在中间件中是匿名的

匿名用户的 Django 会话

python 为匿名django用户创建会话

在 Django 中使用自定义用户模型总是在模板中返回匿名用户