zoukankan      html  css  js  c++  java
  • Django不允许单用户多浏览器同时登录

    #在扩展用户表内,多添加一个session字段,用于存放session_key

    models.py

    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())
    

      

  • 相关阅读:
    jQuery标签操作
    Bootstrap和Font Awesome
    jQuery拾遗
    Bootstrap笔记
    软件测试
    Day01 第一个Python程序
    cd指令
    ls命令
    type命令
    每天一个Linux指令
  • 原文地址:https://www.cnblogs.com/linwenbin/p/11647693.html
Copyright © 2011-2022 走看看