Django利用session实现唯一登录

用户唯一登录:当用户处于登录状态时,其他终端再次登录时,会把已登录的一方给挤下线,从而避免重复登录的情况。

Django版本:2.1.7

Pyhton版本:3.7

通过Session实现

实现思路:把用户相关信息存入session,当用户每次登录时,获取有效的session列表,检查其中是否有存有该用户信息的有效session,有即代表该用户处于登录状态,则把该session删除,并再新的session中重新存入该用户信息。(注意:Django是默认把session存入到数据库中的,其在数据库中字段为:session_key,session_data,expire_data。对于失效的session,Django不会自动删除,需要使用者自己操作)

Django视图层:

from django.contrib.sessions.models

import Sessionimport simplejson as json

def login(request):

status = 0 #用户登录状态    

recevie_data = json.loads(request.body) #获取前台提交的json数据    

username = receive_data['username']    

password = receive_data['password']   

 try:       

     get_user = models.user_infor.objects.get(username=username) #从数据库获取该用户记录(这是Django操作数据的方式,通过模型层实现的   和数据库的对象关系映射(ORM)来操作数据库,不做详解)        

    if get_user:            

        if (get_user.username == username and get_user.passowrd == password):                

            session_list = [] #session列表get_effective_session(session_list) #使用get_effective_session()方法获取有效session

            for se in session_list: #判断sessionlist中是否有存有该用户登录信息的session,我是把username和user_id(用户标识码存到session中了)

                if get_user.user_id == se['user_id'] : #用户已登录

                    Session.objects.filter(session_key = se.session['session_key']) #根据session_key来删除对应session(session开头注意那已经说明)

                    break

            request.session['username'] = get_user['username'] #将用户信息存入新的session中

            request.session['password'] = get_user['password']status = 1 # 登录成功

    else: #不存在该用户记录

        pass

except:

    pass

return HttpResponse(json.dumps(status),content_type='application/json') #前台使用ajax进行的登录请求,所以我只返回了status,json.dums()把数据封装成json格式。

代码展示


image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。