• Django中的auth模块(用户认证)


    auth模块

     一、auth模块机制

    使用auth模块先导入auth模块

    from django.contrib import auth django.contrib.auth中提供了许多方法

      auth模块是cookie和session的升级版,auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象,而有了auth模块之后就可以很轻松的去验证用户的登录信息是否存在于数据库中。除此之外,auth还对session做了一些封装,方便我们校验用户是否已登录。

     

    用户登录后:会在django_session中session id,并且把用户信储存起来

    二、auth模块方法

      1 authenticate() 

      提供了用户认证,即验证用户名以及密码是否正确,一般需要username password两个关键字参数。如果认证信息有效,会返回一个 User 对象。authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的。当我们试图登陆一个从数据库中直接取出来不经过authenticate()User对象会报错的!

    user = authenticate(username='someone',password='somepassword')
    

       2、login(HttpRequest, user)

      该函数接受一个HttpRequest对象,以及一个认证了的User对象;此函数使用django的session框架给某个已认证的用户附加上session id等信息。

    def log_in(request):
        if request.method == "POST":
            user = request.POST.get("user")
            pwd = request.POST.get("pwd")
            # 验证成功,返回user对象,否则返回None
            user = auth.authenticate(username=user,password=pwd)
            if user:
                auth.login(request,user)    #session写操作
                return redirect("/index/")
    
        return render(request,"longin.html")
    

      3、logout(request) 注销用户

      该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。 

    def log_out(request):
        auth.logout(request)
        return redirect("/login/")

      4 user对象的 is_authenticated

      要求:

        1 用户登陆后才能访问某些页面,

        2 如果用户没有登录就访问该页面的话直接跳到登录页面

        3 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址

    方法1:
    
    直接用auth的is_authenticated方法验证
    
    def my_view(request):
          if not request.user.is_authenticated:
                return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
    
    
    方法2:
    
    根据request.user.username来验证,如果为空,则说明没有登录
    
    def my_view(request):
          if not request.user.username:
                return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
    
    方法3:
    
    django已经为我们设计好了一个用于此种情况的装饰器:login_requierd()
    
    from django.contrib.auth.decorators import login_required
           
    @login_required
    def my_view(request):
      ...
    

      若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' (这个值可以在settings文件中通过LOGIN_URL进行修改)。并传递  当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。

    eg:

    def index(request):
        print(request.user)
        print(type(request.user))
    
        #方法一
        # if not request.user.id:
        #     return redirect("/login/")
    
        #方法二
        user = request.user
        if not user.is_authenticated:
            return redirect("/login/")
        return render(request,"index.html",locals())
    

      

      

      

     

    
    
  • 相关阅读:
    兰迪·波许教授的最后一课
    How can I convert from GdiPlus::Image to CBitmap?
    环境变量以及ControlSet
    判断操作系统类型的多种方法
    顺序表
    操作系统版本号
    64bit操作系统的重定向
    CListCtrl资料
    Custom draw 和 Owner draw 的区别
    Silent Install / Uninstall
  • 原文地址:https://www.cnblogs.com/mainstream/p/11113595.html
Copyright © 2020-2023  润新知