Django does not allow single-user multiple browsers to simultaneously log

# Extended in the user table, to add a multi-session field for storing 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

the Login DEF (Request): 
    IF request.method == "POST": 
        
        # receiving POST data 
        UserName = request.POST.get ( "UserName") 
        Password = request.POST.get ( "Password") 
        # for login computer's IP 
        = request.META IP [ 'REMOTE_ADDR'] 
        
        IF len (userName) == 0 or len (password) == 0: 
            error_login = "username and password can not be null" 
            return the render (Request, "the login.html", about locals ( )) 
            
        the else: 
            user = auth.authenticate (userName = username, password = password) 
            
            # user If true, the verification by the 
            IF user: 
            
                    # Get list of user session data, 
                pduser = UserInfo.objects.filter (username = userName ).values()[0]["session"]
                
                # If the session is "None" then the have not signed a new user 
                
                IF pduser == "None": 
                    # write session 
                    auth.login (Request, the User) 
                    # username write session 
                    request.session [ "the User"] = UserName 
                    makes request.session [ "ID"] = request.user.id 
                    makes request.session [ "css_ys"] = request.user.css_ys 
                    session_id = request.session.session_key 
                    IP request.META = [ 'REMOTE_ADDR'] 
                    #### after logging in, session_key generated, writes the session inside session_key user table 
                    UserInfo.objects.filter (username = userName) .update ( session = session_id, login_ip = ip) 
                    return redirect ( "/ index /" ) 
                # If the field is not the user's session "None", the user session table corresponding to the field delete session table session_key of 
                the else: 
                    # ensure that there is only one user session 
                    
                    request.session.delete (pduser ) 
                    # write the session 
                    the auth.login (Request, User) 
                    # username write the session 
                    makes request.session [ "User"] = userName 
                    makes request.session [ "ID"] = request.user.id 
                    makes request.session [ "css_ys"] request.user.css_ys = 
                    session_id = request.session.session_key 
                    UserInfo.objects .filter (username = userName) .Update (= the session session_id) 
                    # log acquiring the 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())

  

Guess you like

Origin www.cnblogs.com/linwenbin/p/11647693.html