Django实现单用户登录的方法示例

  

最近由于要毕业了写论文做毕设,然后还在实习发现已经好久都没有写博客了。今天由于工作需求,需要用Django实现单用户登录。大概意思就是跟QQ一样的效果,每个账号只能一个地方登录使用,限制账号的登录次数。由于用的是Django自带的认证,然后校验用户是否登录其实就是通过会话实现的。下面就简单分享一下怎么实现的吧。

  

<强>单用户登录实现
  

  

在做用户登录认证的时候Django自带的有is_authenticated()方法。下面就是一个简单的认证过程。

        如果request.user.is_authenticated(): #判断是否登录   返回重定向('/索引/')   其他:   返回重定向('/账户/登录/')   之前      

现在步入正题,讲一下具体实现流程吧。我们在做用户登录的时候一般会扩展Django自带的用户表,当然方法一般有几种,你可以继承AbstractUser表然后写入自己想要的字段,还可以单独建个表然后跟用户表建立一对一的关系,具体的实现这里就不多加描述了。

  

我才用的是单独建立一个用户信息表于用户表进行一对一关联,在用户表里面增加一个session_key字段用于存最新用户登录的session_key。每次我们登录就取出这个值进行判断,如果里面没有值,表示用户没有登录就可以走正常的登录流程。如果里面有值,说明代表的是前面用户登录留下的session_key,我们就先在会话表里面删除掉这个记录,让上一个登录用户的会话失效,然后登录的时候再把最新登录生成的session_key更新到用户信息表里面,用作下一个校验。这样就能简单快捷的实现Django的单用户登录了。

  

核心代码截图:

  

 Django实现单用户登录的方法示例

  

具体实现代码如下:

        django。快捷键输入重定向   从django.views.decorators.cache进口never_cache   从django.views.decorators.csrf进口csrf_exempt   从django.contrib。身份验证登录作为auth_login导入,进行身份验证   从app01。模型导入UCenter #用户信息表         @csrf_exempt   @never_cache   def登录(请求):   如果request.user.is_authenticated ():   返回重定向('/索引/')   其他:   如果请求。方法==癙OST”:   用户名=request.POST.get(“用户”)   密码=request.POST.get(“密码”)   authenticated_user=验证(用户名=用户名、密码=密码)   如果authenticated_user:      单号用户登录   user_obj=UCenter.objects.filter(用户id=authenticated_user) #找到登录的用户对象   is_session_key=user_obj.first ()。session_key #获取登录对象的session_key   如果is_session_key: #用户已登录   request.session.delete (is_session_key) #删除登录前面登录用户的session_key   auth_login(请求,authenticated_user) #用户信息存入会话   user_obj.update (session_key=request.session.session_key) #更新新登录用户的session_key   返回重定向('/索引/')   其他:   返回重定向('/账户/登录/')      

当然还有一些其他的实现方法,根据自己需求场景选择吧。其他的解决方法

  https://stackoverflow.com/questions/8927327/allowing-only-single-active-session-per-user-in%20-django-APP

  https://stackoverflow.com/questions/953879/how-to-force-user-logout-in-django

  https://stackoverflow.com/questions/821870/how-can-i-detect-multiple-logins-into-a-django-web-application-from-different-lo

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Django实现单用户登录的方法示例