前言

在开发一个网站时,经常会用到用户的注册和登陆相关的账号管理功能,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模块登陆认证相关推荐

  1. hikaridatasource 加密后登陆不上_渗透测试 | 突破前端JS加密限制

    前言 现在前端开发为了提高爬虫的难度及加强安全性,都会在数据包提交前进行加密,最典型的就是传参加密,相信大家在测试的时候都遇到过,那么我们在抓取数据包并修改之后,修改之后的参数无法通过后端程序数据完整 ...

  2. c++ websocket客户端_python测试开发django81.dwebsocket实现websocket

    前言 HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息. WebSocket 协议它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是 ...

  3. python开发面试题目_Python测试开发面试笔试题

    Python 测试开发面试笔试题 一,中文单项选择题(30 分,每个 3 分) 1.下列哪个语句在 Python 中是非法的? A.x = y = z = 1 B.x = (y = z + 1) C. ...

  4. python卸载后安装不上_python卸载后怎么也安装不上

    本文主要给大家介绍了关于python卸载再安装遇到问题的解决方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 卸载Python: 先在cmd下查看你的python版本,在网上下载 ...

  5. c#生成token访问的接口_python测试开发django60.token登录(TokenAuthentication)

    前言 现在很多接口项目在登录的时候返回一个token,登录后的拿着这个token去访问访问登录之后的请求. 本篇使用djangorestframework框架写一个登陆的接口,登录成功后返回token ...

  6. select三级联动 怎么删除前一个的_python测试开发django57.xadmin选项二级联动

    前言 当我们选择项目分类的时候,一个项目下关联多个模块,同时有这两个选项框的时候,需要实现选中一个项目,模块里面自动删除出该项目下的模块,如下图这种 解决基本思路: 1.写个jqeury脚本监听cha ...

  7. python的django后台管理_python测试开发django-17.admin后台管理

    前言 通常一个网站开发,需要有个后台管理功能,比如用后台管理发布文章,添加用户之类的操作.django的admin后台管理主要可以实现以下功能 基于admin模块,可以实现类似数据库客户端的功能,对数 ...

  8. ajax get请求_python测试开发django50.jquery发送Ajax请求(get)

    前言 有时候,我们希望点击页面上的某个按钮后,不刷新整个页面,给后台发送一个请求过去,请求到数据后填充到html上,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.Ajax可以完美的 ...

  9. python 怎么把 写好的代码 放到服务器执行_python测试开发django(1)--开始Hello World! - 星空6...

    前言 当你想走上测试开发之路,用python开发出一个web页面的时候,需要找一个支持python语言的web框架.django框架有丰富的文档和学习资料,也是非常成熟的web开发框架,想学pytho ...

最新文章

  1. 将word文档按分页另存为多个word文件的VBA代码
  2. tcp三次握手为啥不是4次
  3. 谈谈 Java 的克隆
  4. 详解fianl,finally,finalize关键字
  5. 人脸关键点: DCNN-Deep Convolutional Network Cascade for Facial Point Detection
  6. DeepMind作弊?被质疑干翻星际2顶尖高手全靠手速
  7. Oracle中的rownum不能使用大于的问题
  8. USB转双串口产品设计-RS485串口
  9. python发送短信接口_Python发短信接口
  10. android移动控件位置
  11. ROS2进阶:安装与初体验(附choco介绍)
  12. Java电商平台-电商订单系统全解析
  13. 电脑桌面app客户端、微信公众号-小程序测试方法
  14. PLC按时间启停设备运转,设备到期停止设备运转
  15. 结构光学习 | 波前重构技术
  16. C. 小花梨判连通(图的搜索)(map)
  17. mysql+php+模板+条目_html模板
  18. 632页,我熬夜读完这份“高分宝典”,竟4面拿下字节跳动offer
  19. 三星提出XFormer | 超越MobileViT、DeiT、MobileNet等模型
  20. 什么样的照明灯对眼睛好?分享光线柔和的LED护眼灯

热门文章

  1. 运算放大器在超高频信号作用下的偏移量的变化
  2. python坐标点怎么输入_python导入坐标点的具体操作
  3. python重复执行函数_Python threading 单线程 timer重复调用函数
  4. 移动apn接入点哪个快_移动4g网速最快接入点_2020移动最佳APN接入点
  5. 【 MATLAB 】ndgrid 和 meshgrid 对比理解以及应用
  6. linux下配置java
  7. 阻塞队列(1)--ArrayBlockingQueue底层实现
  8. 除了密钥,公有云还有哪些安全保护方式
  9. 通过docker-compose构建ghost博客(一)
  10. Duktape 集成