zoukankan      html  css  js  c++  java
  • 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表的操作方法,现在全部用自定义的表均可实现
      """
      
  • 相关阅读:
    第三次作业,结对编程
    第二次作业
    第一次作业
    最小环问题
    拓扑排序——烦人的幻灯片
    拓扑排序——奖金
    洛谷——P2330 [SCOI2005] 繁忙的都市
    洛谷——P2820 局域网
    最小生成树——最短网络Agri-Net
    最小生成树——城市公交网建设问题
  • 原文地址:https://www.cnblogs.com/king-home/p/11061663.html
Copyright © 2011-2022 走看看