Django ——auth认证

Auth 认证模块

1、什么是auth认证

Auth模块是Django自带的宇哥用户认证模块,里面包括:用户认证,用户登录,用户认证,注销,修改密码等功能。
它内置统一的认证体系--auth:它默认使用auth_user 表来存储用户数据

2、怎么用auth认证

from django.contrib import auth

2.1 authenticate()

  • 提供用户认证功能,及用户名和密码是否争取。需要username,password两个关键字参数

  • 如果认证成功,返回一个User对象

  • 如果认证成功,会在对象上设置一个标识来给后端,已经认证该用户,且后续认证过程是需要的

  • 用法

user = authenticate(username='usernamer',password='password')

2.2 login(HttpRequest,user)

  • 该函数接受一个HttpResponse对象,以及会经过认证的User对象
  • 该函数实现一个用户登录的功能,它的本质上会在后端生成相关的session

用法:

form django.contrib import auth
def auth_login(request):
	if request.method =='POST':
        username = request.POST.get('username')
		password = request.POST.get('password')
		# 认证用户输入的用户名和密码是否正确
		user_obj = auth.authenticate(username=username,password=password)
		if user_obj:
			# 记录用户的状态,一旦认证成功可以在任何地方通过request.user来获取当前的登录的用户
			# request.senssion['name']='jasong'
			auth.login(request,user_obj)  # 内部自动生成一个相关的session值,把用户信息放入到session中
            return HttpResponse('login successfully')
	return render(request,'auth_log.html')            
  • 上面的登录功能的亮点
# 只要登录成功执行了 auth.login(request,user)
# 之后再任何视图函数中都可以通过request.user 获取当前用户对象
# 当没有执行auth.login, request.user打印出来的都是匿名用户
# 如何判断用户是否通过auth.login登录?
# request.auth.is_auth

2.3 logout(request)

def logout(request):
	auth.logout(request)
	return HttpResponse('ok')

2.4 装饰器校验是否登录成功及跳转

  • 局部装饰器
from django.contrib.auth.decorators import login_required
@login_required(login_url='/auth_login/') # 局部配置
def auth_home(request):
	return HttpResponse('home必须登录才能访问')
  • 全局装饰器
# 在setting配置文件中指定auth登录不合法的统一跳转路径
LOGING_URL = '/login/' # 既可以局部配置,也可以全局配置

@login_required
def auth_home(request):
	return HttpRespionse('ok')

2.5 auth_user表添加数据

from django.contrib.auth.models import User
def register(request):
	User.objects.create() # 不能使用,这个产生的密码是名文
    User.objects.createuser() # 创建普通用户
    user.objects.createsuperuser() # 创建超级用户

2.6 校验密码、修改密码

def set_password(request):
    old_password = request.POST.get(old_password)
	new_password = request.POST.get(new_password)
	# 校验输入的旧密码是否与现有密码一致
	is_res = request.user.check_password(old_password)
	if is_res:
        # 修改密码为新密码
        request.user.set_password('new_password')
		# 下面的保存操作千万不能忘记
        request.user.save()
    return HttpResoponse('ok')

2.7 自定义模型表应用auth功能

  • 一对一关联

    from dajango.contrib.auth.model import User
    
    class UserDetail(models.Model):
        phone = models.Charfield(max_length=11)
    	user = models.OneToOneField(to=User)
    
  • 面向对象继承

    from django.contrib.auth.models import User,AbstractUser
    class UserInfo(abstractUser):
    	phone = models.Charfield(maxlength=32)
        
        
    # 需要在settings文件中指定不再使用auth_user表,而是使用我自己创建的user_info
    AUTH_USER_MODEL = 'app名.models里面对应的模型表名'
    
    
    """
    自定义认证系统默认使用的数据表之后,我们就可以像使用默认的auth_user表那样使用我们的UserInfo表了。
    库里面也没有auth_user表了,原来auth表的操作方法,现在全部用自定义的表均可实现
    """
    
原文地址:https://www.cnblogs.com/king-home/p/11061663.html