我如何通过 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 Device
或id of internet provider
或ip 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 Device
或 id of internet provider
或 ip 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 中的视频观看次数的主要内容,如果未能解决你的问题,请参考以下文章