python测试开发django-42.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: root>

# 输入错误的密码,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 "<console>", line 1, in <module>
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)

原文地址:https://www.cnblogs.com/yoyoketang/p/10624931.html

时间: 2024-08-29 14:52:00

python测试开发django-42.auth模块登陆认证的相关文章

Django之auth模块用户认证模块

一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统. 此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth, 它默认使用 auth_user 表来存储用户数据. 2)auth模块的功能

python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)

前言 xadmin的详情页面主要是用form_layout布局,学会了完全可以不用写html代码,也能做出很好看的页面. xadmin的html页面是用的Bootstrap3框架设计的,layout布局用到的是django-crispy-forms框架,本篇详细讲下django-crispy-forms的官方文档案例 django-crispy-forms 当我们使用xadmin后台的时候,在INSTALLED_APPS里面同时添加了xadmin和crispy_forms这2个app,xadmi

python测试开发django-16.JsonResponse返回中文编码问题

前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面的User表,测试数据如下 user_name psw mail yoyo 123456 [email protected] yoyo2 111111 1 yoyo5 111111 0 接着上一篇[python测试开发django-15.查询结果转json(serializers)],如果数据库里面

2019第一期《python测试开发》课程,10月13号开学

2019第一期<python测试开发>课程,10月13号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:10月13号-12月8号,每周六.周日晚上20:30-22:30 报名费:报名费2000一人(周期2个月) 联系QQ:283340479 课表如下 课程主要涉及的内容: 1.httprunner框架以及web平台做接口自动化测试 (装逼必备) 2.django平台开发 (python开发必会) 3.pytest框架结合selenium做web自动化测试 (

python测试开发之_字符串练习

编程学习是个漫长.逐渐累加复杂度.综合难度的一门工程.需要自我驱动,督促自己往前走.Python测试开发是本年度重点学习目标. 今天来一个字符串的练习题,重在思路,不断训练自己的思维. 题目:找出字符串中出现次数最多的字符,并输出其出现的位置 代码实现: #encoding=UTF-8 s = "aaabbbhhiijk" letter_count_dict={} for i in s: if letter_count_dict.has_key(i): #判断是否在字典中出现过 let

Python测试开发-创建模态框及保存数据

Python测试开发-创建模态框及保存数据 原创: fin  测试开发社区  前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体.可用来做交互,我们经常会看到模态框用来登录.确定等等,到底是怎么实现这种弹出效果,bootstrap已经为我们提供了相应的组件. 1.界面原型 点击添加,弹出模态框, 然后输入 用户:tester, 消息:你好.如下图1所示: ▲图1 再点击保存,那么数据库就存入了以上输入的数据,查看界面的用户列表会显示tester,如下图2所示: ▲图2 2.开发过程 接下

Django之auth模块(用户认证)登陆组件

auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象, 而有了auth模块之后就可以很轻松的去验证用户的登录信息是否存在于数据库中. 除此之外,auth还对session做了一些封装,方便我们校验用户是否已登录 auth里的方法 如果想使用auth模块的方法,必须要先导入auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法

python测试开发django-60.使用token登录(TokenAuthentication)

前言 现在很多接口项目在登录的时候返回一个token,登录后的拿着这个token去访问访问登录之后的请求. 本篇使用djangorestframework框架写一个登陆的接口,登录成功后返回token. 环境准备: python 3.6 django 2.1.2 TokenAuthentication django rest framework权限和认证有四种方式: BasicAuthentication 此身份验证方案使用HTTP基本身份验证,根据用户的用户名和密码进行签名.基本身份验证通常仅

Django 编写博客网站的用户管理部分(采用自有的 django.contrib.auth) 2. 登陆登出和用户信息管理

续前Django 编写博客网站的用户管理部分(采用自有的 django.contrib.auth) 1. 注册部分 项目工具:Python 2.7.11  Django 1.10.2  Bootstrap 3.3.0   IDE:eclipse Pydev 1. 由于Django自带auth, 故仅需编写登录登出的url和template即可 urls常见上篇 template代码如下仅供参考: login 1 {% extends "account_base.html" %} 2 3