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实现二维码扫码自动登录淘宝
Dec 27 Python
用python处理图片实现图像中的像素访问
May 04 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
python实现自动登录
Sep 17 Python
使用django实现一个代码发布系统
Jul 18 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
python 使用cx-freeze打包程序的实现
Mar 14 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
Python爬虫:Request Payload和Form Data的简单区别说明
Apr 30 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 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处理postfix邮件内容的方法
2015/06/16 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
javascript 多级checkbox选择效果
2009/08/20 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
多个checkbox被选中时如何判断是否有自己想要的
2014/09/22 Javascript
JS解析XML实例分析
2015/01/30 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
python学生管理系统学习笔记
2019/03/19 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
python 消费 kafka 数据教程
2019/12/21 Python
python实现超级玛丽游戏
2020/03/18 Python
Python decimal模块使用方法详解
2020/06/08 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
大学生水果店创业计划书
2014/01/28 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
班级活动总结格式
2014/08/30 职场文书
python中如何对多变量连续赋值
2021/06/03 Python