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


Posted in Python onMarch 28, 2019

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

单用户登录实现

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

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实现单用户登录的方法示例

具体实现代码如下:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python计算斗牛游戏概率算法实例分析
Sep 26 Python
Python3使用Matplotlib 绘制精美的数学函数图形
Apr 11 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
Jul 03 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
浅析matlab中imadjust函数
Feb 27 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
Python unittest框架操作实例解析
Apr 13 Python
Python任务调度模块APScheduler使用
Apr 15 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
python爬虫beautifulsoup解析html方法
Dec 07 Python
pyqt5实现登录界面的模板
May 30 #Python
python实现AES加密和解密
Mar 27 #Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 #Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 #Python
Pandas读写CSV文件的方法示例
Mar 27 #Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 #Python
超简单使用Python换脸实例
Mar 27 #Python
You might like
Ajax PHP分页演示
2007/01/02 PHP
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
event.srcElement+表格应用
2006/08/29 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
从零学Python之hello world
2014/05/21 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
python2.7安装图文教程
2018/03/13 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
高中的自我鉴定
2013/12/16 职场文书
服装厂厂长岗位职责
2013/12/27 职场文书
幼儿园教师备课制度
2014/01/12 职场文书
社区网格化管理实施方案
2014/03/21 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
500字小学生检讨书
2015/02/19 职场文书
mysql优化
2021/04/06 MySQL
python基础之停用词过滤详解
2021/04/21 Python
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
JavaScript实现优先级队列
2021/12/06 Javascript
python多线程方法详解
2022/01/18 Python
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技