我正在制作Django应用,访问者无需登录即可回答问题。每个答案的数量将计为“票数”,但我需要限制用户仅回答一个问题。
我需要有经验的人帮助。
答案 0 :(得分:0)
是一种方法,尽管大多数用户的IP会在某个时候改变。您可以让前端转发更不可能更改的网络mac地址。您还可以给每个人访问未过期的Cookie来举行会话,尽管这些可以由用户删除,并且如果他们交换浏览器也不会出现。
Mac地址,Cookie和IP之间的OR是您的最佳选择。记录所有3个人,如果他们造访,并且匹配了其中任何一个,则假定是同一个人
答案 1 :(得分:0)
您可以通过simpleisbetterthancomplex来查看此示例,该示例在您的查询方面可以很好地说明this example。您可以在每次上传使用答案时使用用户ip进行比较,然后根据需要限制用户。 希望这会有所帮助
答案 2 :(得分:0)
您可以使用Django Sessions,也可以尝试使用每个请求中的metadata自行破解某些内容。
Django为匿名会话提供全面支持。会议 框架可让您在一个 每个网站访问者的基础。它将数据存储在服务器端,并且 抽象化cookie的发送和接收。 Cookie包含一个 会话ID –不是数据本身(除非您使用基于Cookie的 后端)。
在Django中的每个请求中,它都带有一个名为META
的东西,其中包含有关该请求的元数据。根据您使用Django视图(基于函数的视图或基于类的视图)的方式,您对META
的访问会有所不同。
Django中的request对象是键值存储,或者基本上是字典。因此,您将在基于函数的视图中使用。如果要跟踪IP地址,则可以在REMOTE_ADDR
内使用META
。但是,这并非万无一失,因为用户可能使用VPN来浏览其他IP地址。
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
您可能希望从那里提供您想要做的事情的更多细节。但是,您应该能够使用请求META
对象中的数据的某种组合来跟踪您的用户并为他们提供更好的体验。
答案 3 :(得分:0)
在用户浏览器中存储令牌可以实现此目的。 我几年前就这样做过,但是存储其他相关数据将证明唯一身份用户(例如令牌+ IP)的准确性。
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)
如果不存在令牌,则将随机令牌设置为响应。