Django2.0 自带的用户认证系统authenticate()

本文介绍了Django2.0中的authenticate()用户认证系统,讲解了其作为默认用户名认证后端的功能,如何使用它进行登录认证,以及如何自定义用户认证后端。还分享了自定义认证后端的步骤,并对比了使用内置认证系统的优点和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

authenticate()用户认证系统学习笔记

  • 什么是用户认证

    • 是Django自带的用户认证后端,默认是使用用户名实现用户认证
  • 用户认证后端位置:
    django.contrib.auth.backends.ModelBackend

  • authenticate()有什么用

    • 用于认证用户名是否存在数据库中;通常用于:登录认证
    • 还可以自定义用户认证:例如:使用用户名和手机号来认证用户
  • 怎样使用

    • 1、导入authenticate包:from django.contrib.auth import authenticate
    • 2、直接调用:
      	user=authenticate(username=username,password)
      
  • 自定义后端认证步骤:

    • 在user应用中创建lib.py文件
    • 在lib.py文件中创建一个类,并继承ModelBankend
    • 重写authenticate()方法
    • 分别使用用户名和手机号来查询用户
    • 返回查询到的用户实例
  • 个人认为它的好处,并且它的认证功能比较安全可靠:

    • 防止在验证过程中出现异常
    • 使用起来比普通认证逻辑要省时省事
  • 在没有使用自带的认证的情况下,个人普通认证逻辑:

    ### 这里演示登录认证用户是否已注册
    	#1、首先导入用户模型类包(根据自己的结构来导入)
    	#2、尝试从User模型类中连接用户表数据库
    try:
    	user=User.objects.get(username=username)
    except:
    	#3、如果抛出异常,则说明没有该用户名
    	return http.HttpResponseServerError("用户名或密码不正确")
    #4、如果能够查询出有该用户名,则校验用户的密码是否正确
    if  not user.check_password(password=password)
    	return http.HttpResponseServerError("用户名或密码不正确")
    else:
    	#5、验证都通过,则状态保持登录,使用Django自带的login()方法
    	from django.contrib.auth import login()
    	login(request,user)
    
    	#6、设置session的过期时间,因为login()使用的是cookie-session机制来进行做状态保持
    	#7、如果没有勾选记住密码,则在浏览器会话结束就删除该用户的session信息
    	if not allow:
    		request.session.set_expiry(0)	#使用request对象的session中的set_expiry()方法来实现,0:表示结束会话后立刻删除session信息
    	#8、如果有勾选记住密码,则在浏览器中设置一个保存session的时间
    	else:
    		request.session.set_expiry(None)	#None:表示会话结束后的2周时间后就删除session信息
    	
    	#9、登录成功后重定向到首页
    	return redirect('/')	
    
  • 使用Django自带的认证系统的情况下:

    #1、导入Django自带的authenticate方法
    from django.contrib.auth import login, authenticate
    #2、直接使用用户认证(这一步之前,需要提前校验前端传入过来的数据格式要求是否达标)
    user=authenticate(username=username,password=password)
    #3、如果认证失败就会返回None,认证成功就会返回User对象,则判断user是否为None,如果不是则 用户是以注册的用户。
    if user is None:
    	return http.HttpResponseServerError("用户名或密码不正确")
    else:
    #4、认证通过,则执行状态保持进行登录
    	login(request,user) 
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值