django登录模块(Django实现单用户登录的方法示例)
django登录模块
Django实现单用户登录的方法示例最近由于要毕业了写论文做毕设,然后还在实习发现已经好久都没有写博客了。今天由于工作需求,需要用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的单用户登录了。
核心代码截图:
具体实现代码如下:
|
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
- 织梦后台常见问题(登录织梦后台提示用户名不存在的解决方法介绍)
- mysql用户登录命令(mysql的登陆和退出命令格式)
- 2020app前端ui框架(amazeui页面分析之登录页面的示例代码)
- SQLServer设置客户端使用IP地址登录的图文详解(SQLServer设置客户端使用IP地址登录的图文详解)
- php制作用户登录(php实现登录页面的简单实例)
- php 模拟登录验证码demo(PHP 模拟登陆功能实例详解)
- 浏览器怎么登录宝塔linux面板(宝塔Linux面板如何绑定域名?登录地址是多少?)
- 如何找到mysqlroot密码(WDCP管理面板忘记MYSQL ROOT密码及重置后台登录密码的方法汇总)
- 远程登录linux服务器(linux云服务器怎么登录?)
- 护卫神主机大师教程(护卫神主机大师Linux登录账户密码忘记的解决办法)
- python如何编写一个用户登录系统(Python实现的登录验证系统完整案例基于搭建的MVC框架)
- thinkphp5.1手动连接mysql数据库(thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例)
- laravel后台登录教程(Laravel 默认邮箱登录改成用户名登录的实现方法)
- pyqt5 登录界面(pyqt5利用pyqtDesigner实现登录界面)
- django登录模块(Django实现单用户登录的方法示例)
- 安装C# Windows服务需要“设置服务登录”
- 四川旅游攻略(四川旅游攻略自由行攻略)
- 上海迪士尼攻略(上海迪士尼攻略旅游)
- 哪里可以看熊猫(成都哪里可以看熊猫)
- oppo手机的三种录屏方法,你知道有哪些吗(oppo手机的三种录屏方法)
- 吉林神秘传染链跨省 传染源尚未找到,舒兰 封城(吉林神秘传染链跨省)
- 吉林舒兰 封城 聚集性疫情传播链已延至沈阳,有一个细节让人忧心(吉林舒兰封城)
热门推荐
- dedecms模板照片(DEDECMS首页调用图片集里的多张图片)
- linux中基本操作系统有什么(Linux操作系统的概述与简介)
- 织梦平台如何更新备案号(详解织梦dedecms短信验证码功能阿里短信)
- sql server设置标识列(Sql Server 如何去掉内容里面的Html标签)
- iis7安全设置(IIS7 IIS8 http自动跳转到HTTPS80端口跳转443端口)
- nginx安全设置(Nginx+ModSecurity安全模块部署的实现)
- select into from 和 insert into select 的用法和区别
- yii与uniapp交互(Yii框架的路由配置方法分析)
- vue 修改后刷新(Vue使用三种方法刷新页面)
- mysql8.0查询操作(MySQL 8.0 redo log的深入解析)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9