当前位置:脚本大全 > > 正文

django登录模块(Django实现单用户登录的方法示例)

时间:2021-10-28 10:23:33类别:脚本大全

django登录模块

Django实现单用户登录的方法示例

最近由于要毕业了写论文做毕设,然后还在实习发现已经好久都没有写博客了。今天由于工作需求,需要用django实现单用户登录。大概意思就是跟qq一样的效果,每个账号只能一个地方登录使用,限制账号的登录次数。由于用的是django自带的认证,然后校验用户是否登录其实就是通过session实现的。下面就简单分享一下怎么实现的吧。

单用户登录实现

在做用户登录认证的时候django自带的有is_authenticated()方法。下面就是一个简单的认证过程。

  • ?
  • 1
  • 2
  • 3
  • 4
  • if request.user.is_authenticated(): # 判断是否登录
  •   return redirect('/index/')
  • else
  •   return redirect('/accounts/login/')
  • 现在步入正题,讲一下具体实现流程吧。我们在做用户登录的时候一般会扩展django自带的user表,当然方法一般有几种,你可以继承abstractuser表然后写入自己想要的字段,还可以单独建个表然后跟user表建立一对一的关系,具体的实现这里就不多加描述了。

    我才用的是单独建立一个用户信息表于user表进行一对一关联,在用户表里面增加一个session_key字段用于存最新用户登录的session_key。每次我们登录就取出这个值进行判断,如果里面没有值,表示用户没有登录就可以走正常的登录流程。如果里面有值,说明代表的是前面用户登录留下的session_key,我们就先在session表里面删除掉这个记录,让上一个登录用户的session失效,然后登录的时候再把最新登录生成的session_key更新到用户信息表里面,用作下一个校验。这样就能简单快捷的实现django的单用户登录了。

    核心代码截图:

    django登录模块(Django实现单用户登录的方法示例)

    具体实现代码如下:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • from django.shortcuts import redirect
  • from django.views.decorators.cache import never_cache
  • from django.views.decorators.csrf import csrf_exempt
  • from django.contrib.auth import login as auth_login, authenticate
  • from app01.models import ucenter # 用户信息表
  •  
  •  
  • @csrf_exempt
  • @never_cache
  • def login(request):
  •   if request.user.is_authenticated():
  •     return redirect('/index/')
  •   else:
  •     if request.method == "post":
  •       username = request.post.get("username")
  •       password = request.post.get("password")
  •       authenticated_user = authenticate(username=username, password=password)
  •       if authenticated_user:
  •         
  •         # 单用户登录
  •         user_obj = ucenter.objects.filter(userid=authenticated_user) # 找到登录的user对象
  •         is_session_key = user_obj.first().session_key # 获取登录对象的session_key
  •         if is_session_key: # 用户已登录
  •           request.session.delete(is_session_key) # 删除登录前面登录用户的session_key
  •         auth_login(request, authenticated_user) # 用户信息存入session
  •         user_obj.update(session_key=request.session.session_key) # 更新新登录user的session_key
  •         return redirect('/index/')
  •       else:
  •         return redirect('/accounts/login/')
  • 当然还有一些其他的实现方法,根据自己需求场景选择吧。其他的解决方法

    https://stackoverflow.com/questions/8927327/allowing-only-single-active-session-per-user-in%20-django-APP

    https://stackoverflow.com/questions/953879/how-to-force-user-logout-in-django

    https://stackoverflow.com/questions/821870/how-can-i-detect-multiple-logins-into-a-django-web-application-from-different-lo

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    原文链接:http://www.cnblogs.com/zzqit/p/10610570.html

    上一篇下一篇

    猜您喜欢

    热门推荐