Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django中识别没有登录功能的用户?_Django_Django Templates_Django Views - Fatal编程技术网

如何在Django中识别没有登录功能的用户?

如何在Django中识别没有登录功能的用户?,django,django-templates,django-views,Django,Django Templates,Django Views,我正在制作Django应用程序,访客可以在其中回答问题,而无需登录功能。每个答案的数量将被计算为“投票”,但我需要限制用户只回答一次问题 我需要在这方面有经验的人的帮助。通过IP是一种方法,尽管大多数用户的IP在某个时候会改变。你可以让你的前端转发网络mac地址,这是不太可能改变的。您还可以在每个人访问一个未过期的cookie时为他们提供会话,尽管这些cookie可以被用户删除,如果他们交换浏览器,这些cookie就不会出现 Mac地址、cookie和IP之间的OR是最佳选择。记录所有3个,如果

我正在制作Django应用程序,访客可以在其中回答问题,而无需登录功能。每个答案的数量将被计算为“投票”,但我需要限制用户只回答一次问题


我需要在这方面有经验的人的帮助。

通过IP是一种方法,尽管大多数用户的IP在某个时候会改变。你可以让你的前端转发网络mac地址,这是不太可能改变的。您还可以在每个人访问一个未过期的cookie时为他们提供会话,尽管这些cookie可以被用户删除,如果他们交换浏览器,这些cookie就不会出现


Mac地址、cookie和IP之间的OR是最佳选择。记录所有3个,如果他们访问并且其中任何一个匹配,则假设是同一个人

您可以查看此示例,通过该示例解释关于您的一个非常好的查询。您可以使用用户ip,并在用户每次上传答案时进行比较,然后根据需要限制用户。 希望这对您有所帮助

您可以使用或尝试使用每个请求中的内容自行整理

Django会议 Django完全支持匿名会话。会议 框架允许您在一个数据库上存储和检索任意数据 每个网站的访客基础。它将数据存储在服务器端和服务器端 摘要发送和接收cookie。Cookies包含一个 会话ID–不是数据本身(除非您使用的是基于cookie的 后端)

请求元数据 在Django中的每个请求中,它都携带一个名为
META
的东西,该东西携带关于请求的元数据。根据您使用Django视图(基于函数的视图或基于类的视图)的方式,您将以稍微不同的方式访问
META

Django中的请求对象是一个键值存储,或者基本上是一个字典。因此,在基于函数的视图中,您将使用。如果您希望跟踪IP地址,则可以在
META
内部使用
REMOTE\u ADDR
。但是,这并不是万无一失的,因为用户可能使用VPN以不同的IP地址进行浏览

基于函数的视图 基于类的视图
从那里你可能想提供更多的细节,你想做什么。但是您应该能够使用request
META
对象中的一些数据组合来跟踪您的用户并为他们提供更好的体验。

在用户浏览器中存储令牌可以实现这一点。 我在几年前就这样做了,但存储其他相关数据将证明唯一用户(如令牌+IP)的准确性


如果令牌不存在,则将随机令牌设置为响应。

检查用户的ip,或在用户浏览器中保存cookie请添加一些代码,我们将查看是否可以找到特定的解决方案。Django sessions可能是你最好的选择。
def my_view(request):
    ip_address = request.META['REMOTE_ADDR']
    # do your stuff
class MyClass(TemplateView):

    def get_context_data(self):
        ip_address = self.request.META['REMOTE_ADDR']
        # do your stuff
        context['ip_address'] = ip_address
seen = objects.browser_seen.filter(token=token, news__id=object_id).exists()
if not seen:
    obj = BrowserSeen.objects.create(token=token)
    obj.news_set.add(objects)