django-利用session机制唯一登录
配置连接数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名称',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '10.18.62.2',
'PORT': '3306',
}
}
生成session表
python manage.py makemigrations
python manage.py migrate
登录时记住保存用户登录信息
# 登录验证
def login_ver(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
'''
# 用前端输入的用户名,密码去数据库里找到用户的信息
user=数据库(username,password)
'''
# 数据库中得有一张users表
user = list(Users.objects.filter(username=username,password=password).values())
# 用户信息记录在session中
request.session['user'] = user
# 创建session,否则key为None
if not request.session.session_key:
request.session.create()
# 获取session_key
key = request.session.session_key
# 当另一机器登录时,本机器应该被挤下即当前sessionkey失效,后登录的用户的session可用,之前的sessionkey从数据库中删除
# 获取指定key的session_data,下面用的ORM模型去数据库中取数据
session_data = list(DjangoSession.objects.filter(session_key=key).values_list('session_data'))[0][0]
# 删除key不为当前key,session_data等于当前session_data的session记录,从而达到一个账号只能一台机器登录的目的
models.DjangoSession.objects.filter(session_data=session_data).exclude(session_key=key).delete()