hikaridatasource 加密后登陆不上_python测试开发django42.auth模块登陆认证
前言
在开发一个网站时,经常会用到用户的注册和登陆相关的账号管理功能,auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理。
像用户注册、用户登录、用户认证、注销、修改密码等功能都不需要我们去开发,这些功能django已经早就设计好了。
auth模块
当我们执行makemigrations和migrate数据库迁移的时候,会自动新增一个auth_user表,用户存放用户账号密码等相关信息。
创建超级管理员用户python manage.py createsuperuser
的时候,会在表里面写入管理员的账号、密码、邮箱等相关信息,如下图
这里我的账号是root,密码是root,很显然存在数据库的密码不是明文的,而是加密后的
认证authenticate()
前面注册的root账号是在auth_user表里面,所以需导入对应的User表,这里密码不是明文的,有个专门的方法authenticate
判断是否登录成功
from django.contrib.auth import authenticate
> python manage.py shell>>> from django.contrib.auth.models import User>>> from django.contrib.auth import authenticate
# 输入正确账号,密码,user返回root用户对象>>> user=authenticate(username='root',password='root')>>> user
# 输入错误的密码,user返回为空>>> user=authenticate(username='root',password='xxxx')>>> user>>>
authenticate认证用户的密码是否有效, 若有效则返回代表该用户的user对象, 若无效则返回None
注册create_user
注册用户可以直接使用create_user
方法,非常方便,前面说过密码是加密后的,这里使用create_user方法新增用户会自动加密存储到数据库了
> python manage.py shell>>> from django.contrib.auth.models import User>>> from django.contrib.auth import authenticate
# 新增用户test.密码test>>> user1=User.objects.create_user(username='test',password='test',email='283340479@qq.com')>>> user1.save()>>>
save保存后,数据库查看auth_user表新增成功
修改密码set_password
当我们需要修改密码的时候,可以用set_password方法,该方法不验证用户的身份,直接修改,一般在已经登陆的时候,修改密码使用
> python manage.py shell>>> from django.contrib.auth.models import User>>> from django.contrib.auth import authenticate>>> user=authenticate(username='test',password='test')
# 设置新密码>>> user.set_password('123456')>>> user.save()
# 修改成功后使用新密码登陆>>> user=authenticate(username='test',password='test')>>> user.set_password('123456')
当密码错误的时候,user返回为空,使用user.set_password(‘123456’)会直接抛异常,所以修改密码的时候,一般先判断下
>>> user=authenticate(username='test',password='test')# 密码不对,user为空抛异常>>> user.set_password('123456')Traceback (most recent call last): File "", line 1, in AttributeError: 'NoneType' object has no attribute 'set_password'# 加判断>>> user=authenticate(username='test',password='test')>>> user>>> if user is not None:... user.set_password('123456')... user.save()...>>>
登陆login
用户登陆功能,有给专门的login函数,它可以在session中添加SESSION_KEY
from django.contrib.auth import login
login(request, user)
传2个参数,request和user参数,这里不需要传密码,需配合authenticate(username=username, password=password)
先校验账号和密码是否成功
login(request, user)
登陆之前还有个is_active
判断, is_active是判断用户是否可以用,当它为is_active的时候(True),用户可以正常登陆,当is_active为0(False),用户不可用,相当于拉入黑名单
from django.contrib.auth import login, authenticate
def login_view(request):'''session登陆''' user = authenticate(username='test', password='test') if user is not None: if user.is_active: login(request, user)
退出登陆
logout会清除request中的user信息, 并刷新session
from django.contrib.auth import logout
def logout_view(request): '''退出登陆''' logout(request)
2019年《python3接口自动化》课程3月17-4月14开课主讲老师:上海-悠悠
上课方式:QQ群视频在线教学
上课时间:每周六、周日晚上20:30-22:30
报名费:1000
联系QQ:283340479
课表详情: 2019《Python3接口自动化》课程3.17开学
hikaridatasource 加密后登陆不上_python测试开发django42.auth模块登陆认证相关推荐
- hikaridatasource 加密后登陆不上_渗透测试 | 突破前端JS加密限制
前言 现在前端开发为了提高爬虫的难度及加强安全性,都会在数据包提交前进行加密,最典型的就是传参加密,相信大家在测试的时候都遇到过,那么我们在抓取数据包并修改之后,修改之后的参数无法通过后端程序数据完整 ...
- c++ websocket客户端_python测试开发django81.dwebsocket实现websocket
前言 HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息. WebSocket 协议它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是 ...
- python开发面试题目_Python测试开发面试笔试题
Python 测试开发面试笔试题 一,中文单项选择题(30 分,每个 3 分) 1.下列哪个语句在 Python 中是非法的? A.x = y = z = 1 B.x = (y = z + 1) C. ...
- python卸载后安装不上_python卸载后怎么也安装不上
本文主要给大家介绍了关于python卸载再安装遇到问题的解决方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 卸载Python: 先在cmd下查看你的python版本,在网上下载 ...
- c#生成token访问的接口_python测试开发django60.token登录(TokenAuthentication)
前言 现在很多接口项目在登录的时候返回一个token,登录后的拿着这个token去访问访问登录之后的请求. 本篇使用djangorestframework框架写一个登陆的接口,登录成功后返回token ...
- select三级联动 怎么删除前一个的_python测试开发django57.xadmin选项二级联动
前言 当我们选择项目分类的时候,一个项目下关联多个模块,同时有这两个选项框的时候,需要实现选中一个项目,模块里面自动删除出该项目下的模块,如下图这种 解决基本思路: 1.写个jqeury脚本监听cha ...
- python的django后台管理_python测试开发django-17.admin后台管理
前言 通常一个网站开发,需要有个后台管理功能,比如用后台管理发布文章,添加用户之类的操作.django的admin后台管理主要可以实现以下功能 基于admin模块,可以实现类似数据库客户端的功能,对数 ...
- ajax get请求_python测试开发django50.jquery发送Ajax请求(get)
前言 有时候,我们希望点击页面上的某个按钮后,不刷新整个页面,给后台发送一个请求过去,请求到数据后填充到html上,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.Ajax可以完美的 ...
- python 怎么把 写好的代码 放到服务器执行_python测试开发django(1)--开始Hello World! - 星空6...
前言 当你想走上测试开发之路,用python开发出一个web页面的时候,需要找一个支持python语言的web框架.django框架有丰富的文档和学习资料,也是非常成熟的web开发框架,想学pytho ...
最新文章
- 将word文档按分页另存为多个word文件的VBA代码
- tcp三次握手为啥不是4次
- 谈谈 Java 的克隆
- 详解fianl,finally,finalize关键字
- 人脸关键点: DCNN-Deep Convolutional Network Cascade for Facial Point Detection
- DeepMind作弊?被质疑干翻星际2顶尖高手全靠手速
- Oracle中的rownum不能使用大于的问题
- USB转双串口产品设计-RS485串口
- python发送短信接口_Python发短信接口
- android移动控件位置
- ROS2进阶:安装与初体验(附choco介绍)
- Java电商平台-电商订单系统全解析
- 电脑桌面app客户端、微信公众号-小程序测试方法
- PLC按时间启停设备运转,设备到期停止设备运转
- 结构光学习 | 波前重构技术
- C. 小花梨判连通(图的搜索)(map)
- mysql+php+模板+条目_html模板
- 632页,我熬夜读完这份“高分宝典”,竟4面拿下字节跳动offer
- 三星提出XFormer | 超越MobileViT、DeiT、MobileNet等模型
- 什么样的照明灯对眼睛好?分享光线柔和的LED护眼灯
热门文章
- 运算放大器在超高频信号作用下的偏移量的变化
- python坐标点怎么输入_python导入坐标点的具体操作
- python重复执行函数_Python threading 单线程 timer重复调用函数
- 移动apn接入点哪个快_移动4g网速最快接入点_2020移动最佳APN接入点
- 【 MATLAB 】ndgrid 和 meshgrid 对比理解以及应用
- linux下配置java
- 阻塞队列(1)--ArrayBlockingQueue底层实现
- 除了密钥,公有云还有哪些安全保护方式
- 通过docker-compose构建ghost博客(一)
- Duktape 集成