#在扩展用户表内,多添加一个session字段,用于存放session_key
models.py
lass UserInfo(AbstractUser):
id = models.AutoField(primary_key=True)
department = models.CharField(max_length=10)
last_login = models.CharField(max_length=32, null=True)
login_ip = models.CharField(max_length=32, null=True)
date_joined = models.CharField(max_length=32, null=True)
session = models.CharField(max_length=32,null=True)
知识兔views.py
ef login(request):
if request.method == "POST":
#接收POST数据
UserName = request.POST.get("UserName")
Password = request.POST.get("Password")
#获取登录电脑的IP
ip = request.META[‘REMOTE_ADDR‘]
if len(UserName) == 0 or len(Password) == 0:
error_login = "用户名密码不能为空"
return render(request, "login.html", locals())
else:
user = auth.authenticate(username=UserName, password=Password)
# user如果为真,则验证通过
if user:
#获取用户表里的session数据,
pduser = UserInfo.objects.filter(username=UserName).values()[0]["session"]
#如果session为“None”则说明还没有登录过的新用户
if pduser == "None":
# 写入session
auth.login(request, user)
# username写入session
request.session["user"] = UserName
request.session["id"] = request.user.id
request.session["css_ys"] = request.user.css_ys
session_id = request.session.session_key
ip = request.META[‘REMOTE_ADDR‘]
####登录后,会生成session_key,将session_key写入到用户表的session里面
UserInfo.objects.filter(username=UserName).update(session=session_id,login_ip=ip)
return redirect("/index/")
#如果用户的session字段不为"None",则通过用户表session字段删除对应session表的session_key
else:
#保证一个用户只存在一个session
request.session.delete(pduser)
# 写入session
auth.login(request, user)
# username写入session
request.session["user"] = UserName
request.session["id"] = request.user.id
request.session["css_ys"] = request.user.css_ys
session_id = request.session.session_key
UserInfo.objects.filter(username=UserName).update(session=session_id)
# 获取登录IP
ip = request.META[‘REMOTE_ADDR‘]
UserInfo.objects.filter(username=UserName).update(login_ip=ip)
time_xxx = time.strftime("%Y-%m-%d %X")
Login_log.objects.create(user=UserName, IP=ip, login_time=time_xxx, status="登录成功")
return redirect("/index/")
else:
error_login = "用户名密码错误"
request.session["id"] = request.user.id
time_xxx = time.strftime("%Y-%m-%d %X")
Login_log.objects.create(user=UserName, IP=ip, login_time=time_xxx, status="密码错误")
return render(request, "login.html", locals())
else:
ip = request.META[‘REMOTE_ADDR‘]
return render(request, "login.html", locals())
知识兔