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