Django不允许单用户多浏览器同时登录
Posted hulue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django不允许单用户多浏览器同时登录相关的知识,希望对你有一定的参考价值。
models.py
#在扩展用户表内,多添加一个session字段,用于存放session_key
class 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
def 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())
以上是关于Django不允许单用户多浏览器同时登录的主要内容,如果未能解决你的问题,请参考以下文章
windows server 2012 如何设置远程登录同时多用户登录