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选择排序算法的实现代码
Nov 21 Python
Python实现向QQ群成员自动发邮件的方法
Nov 19 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
Python Socket传输文件示例
Jan 16 Python
Python实现读取字符串按列分配后按行输出示例
Apr 17 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
python实现列表中由数值查到索引的方法
Jun 27 Python
pandas 数据归一化以及行删除例程的方法
Nov 10 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
Python + Flask 实现简单的验证码系统
Oct 01 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 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
php仿discuz分页效果代码
2008/10/02 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
JavaScript 学习笔记(五)
2009/12/31 Javascript
javascript开发中因空格引发的错误
2010/11/08 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
javascript瀑布流式图片懒加载实例解析与优化
2016/02/23 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
详解如何运行vue项目
2019/04/15 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
Python中apply函数的用法实例教程
2014/07/31 Python
Python分析学校四六级过关情况
2017/11/22 Python
Python实现的计算器功能示例
2018/04/26 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
set在python里的含义和用法
2019/06/24 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
大学生求职简历的自我评价
2013/10/14 职场文书
告诉你怎样写创业计划书
2014/01/27 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
教师批评与自我批评
2014/10/15 职场文书
配置Kubernetes外网访问集群
2022/03/31 Servers
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL