• auth组件


    Django auth认证组件 简介

    '''
    	Django auth认证组件提供了用户表的构建方式,认证接口,会话登录与注销接口. 中间件将会话登录用户保存到request对象中,这样不用从会话中获取用户id,再通过model获取用户对象.
    	对于认证接口要提供用户名和密码传入auth.authenticate(username,password),认证成功, 就可以得到认证用户对象.
    	只需要根据认证结果是否有对象,来判定认证结果,来进行后面的操作.返回的用户对象传入auth.login(request,user)接口,调用接口,可以会将用户登录信息记录到session中.
    '''
       
    

    auth组件常用api

    1, auth.authenticate(username=login_name,password=pwd)
    # 认证成功返回User对象,失败返回None
    
    2, auth.login(request, user) 
    # 注意request是必须的,是请求对象,user是通过authenticate认证后得到的。作用会话登录,将登录信息保存到会话中。如果当前会话已经产生会flush。
    
    3, request.user 
    # 这个就是一个django.utils.functional.SimpleLazyObject对象,如果authenticate认证成功,返回的对象是model-user对象,也就是auth_user表对象;将该对象进过auth.login后,那么request.user就是相应的该用户;不然就是一个anonymous用户。通过request.user可以判定是否有用户登录。
    # 重要:request.user是一个全局变量,可以在视图和模版中使用。
    
    4, auth.logout(request) 
    # 登出当前session中登录的用户,如果没有用户登录,也不会报错。登出后request.user就是annoymouse用户了。会清空会话。
    
    5, reques.user.username
    # 可以判定是否有用户登录。不能使用request.user判定是否有用户登录,因为没有用户登录,这个也会返回一个annoymouse用户,只有访问其属性才会返回一些False值。
    #所以通过request.user.* 的属性才能判定是否有用户登录的状态。
    
    6, request.user.is_authenticated 
    # 判定是否登录返回True或False.
    
    7, django.contrib.auth.get_user_model() 
    # 可以获取到当前auth组件使用的认证model类
    

    注意区别两个API判定 ‘是否认证’ 与 ‘是否认证成功的区别’

    # auth.authenticate() 与 request.user.is_authenticated 的使用场景和功能区别:
    
    '''
    前者 是 认证 ,其返回的结果是User_obj 或者 None,目的是判定认证是否成功,仅仅使用在登录认证view视图函数中。
    
    
    后者 是 是否有用户登录, 其返回结果是True 或者False。目的是校验用户是否登录了,用于除了登录认证view与不校验用户登录的view。即需要校验用户登录状况才有后续操作的情景中。这个的前提是auth.authenticate和auth.login 两个登录过程操作。只有两者操作了,才有登录的判定。
    '''
    

    Auth组件默认auth_user表常用操作

    # 1、校验用户账号及密码,校验成功返回user对象
    from django.contrib.auth import authenticate
    user = authenticate(username=usr, password=pwd)
    
    # 2、注册用户到request对象中,注册成功可以request.user访问当前登录用户(会形成session记录)
    from django.contrib.auth import login
    login(request, user)  # 注册authenticate成功(当前登录)的用户
    
    # 3、注销当前注册的user (用户注销)
    from django.contrib.auth import logout
    logout(request)
    
    # 4、校验用户登录状态
    # 视图函数中使用
    if request.user.is_authenticated(): pass
    # 模板语言中使用
    {% if request.user.is_authenticated %}
    {% else %}
    {% endif %}
    
    # 5、校验登录状态的装饰器
    from django.contrib.auth.decorators import login_required
    @login_required(login_url='/user_login/')
    def user_home(request):
        return render(request, 'user.html', locals())
    
  • 相关阅读:
    redhat6.4 数据包无法到达
    hibernate-Table 'XXX.XXX' doesn't exist
    LeetCode 之 TwoSum
    vim 中的常用编辑
    linux sed 批量替换多个文件中的字符串
    RedHat 6.4企业版利用iso镜像做本地yum源
    win7 vmware虚拟机上网设置
    virtualbox ubuntu下ssh连接
    Source Insight 插件
    非递归排序
  • 原文地址:https://www.cnblogs.com/kp1995/p/10651161.html
Copyright © 2020-2023  润新知