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

时间:2019-02-20 13:24:51

标签: django django-templates django-views

我正在制作Django应用,访问者无需登录即可回答问题。每个答案的数量将计为“票数”,但我需要限制用户仅回答一个问题。

我需要有经验的人帮助。

4 个答案:

答案 0 :(得分:0)

通过IP的

是一种方法,尽管大多数用户的IP会在某个时候改变。您可以让前端转发更不可能更改的网络mac地址。您还可以给每个人访问未过期的Cookie来举行会话,尽管这些可以由用户删除,并且如果他们交换浏览器也不会出现。

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

答案 1 :(得分:0)

您可以通过simpleisbetterthancomplex来查看此示例,该示例在您的查询方面可以很好地说明this example。您可以在每次上传使用答案时使用用户ip进行比较,然后根据需要限制用户。 希望这会有所帮助

答案 2 :(得分:0)

您可以使用Django Sessions,也可以尝试使用每个请求中的metadata自行破解某些内容。

Django会话

  

Django为匿名会话提供全面支持。会议   框架可让您在一个   每个网站访问者的基础。它将数据存储在服务器端,并且   抽象化cookie的发送和接收。 Cookie包含一个   会话ID –不是数据本身(除非您使用基于Cookie的   后端)。

请求META数据

在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)

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