zoukankan      html  css  js  c++  java
  • django组件之用户认证组件

    auth模块

    导入语法: from django.contrib import auth

      django.contrib.auth中提供了许多方法,这里主要介绍其中的三个:(这些都是基于使用auth_user这张表的前提的)

    auth.authenticate()   

    提供用户认证的功能,当认证成功之后会返回一个对象,没有返回None(一般需要俩两个参数,username.password------和auth_user表的字段对齐)

    user_obj=auth.authenticate(username='xx',password='ww')

      authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的。
    当我们试图登陆一个从数据库中直接取出来不经过authenticate()的User对象会报错的!!

    login(request, user) 

    
    

    该函数接受一个HttpRequest对象,以及一个已经认证了的User对象

    此函数使用django的session框架给某个已认证的用户附加上session id等信息。

    def login(request):
        if request.method=='GET':
            return render(request,'login.html')
        else:
            user=request.POST.get('user')
            pwd=request.POST.get('pwd')      #有这个对象,返回对象,没有值返回None
            user_obj=auth.authenticate(username=user,password=pwd)
            if user_obj:
                # request.session['is_login']=True  #session的写法
                # request.session['user']=user      #创建一把钥匙
                auth.login(request,user_obj)        #注入session信息 request.session['user_id']=user_obj.pk
                print(request.user)            #request.user=user_obj
                return redirect('/index/')
            else:
                return redirect('/login/')

    auth.logout(request)

    注销在服务器上的登录记录:

    def logout(request):
    auth.logout(request)
    return render(request,'login.html') #注销后跳转到登录页

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

    user对象

    1. 之前函数执行login(),登录成功,request.user代表登录对象  
      具有多个属性:1. request.user.username
             2. request.user.id
             3. request.user.email 等等   

    2. 没有登录过,AnonymousUser默认匿名用户对象
      只有一个属性:1. reques.user.id

    3.我们要明确的是:
      1.request.user并不是请求体中的,而是中间件.middleware.AuthenticationMiddleware在认证成功之后帮我们注入的.(中间件执行优先)

      2.每一次请求,都要先经过中间件,中间件会先检查你的钥匙,如果数据库有你的钥匙就把钥匙指向的对象取出来,赋值给request.user_id,
       如果没有钥匙的,服务端也会给request.user赋一个值,request.user_id,匿名用户!

      3. request.user是一个全局变量,无论在哪一个视图函数中都能使用,包括页面(template)

    user对象api之request.user.is_authenticate

      判断是否登录:
    1.request.user.id 2.request.user.is_authenticate

    #两者区别不大

    user对象api之@login_required

    其实是一个双层装饰器函数,最主要是其可以跳转到登录前的页面

    user对象api之创建用户

    auth_user表:
    from django.contrib.auth.models import User
    User.objects.create(username
    ="alex",password="123") #注意,这是明文的存储
    User.objects.create_user(username
    ="alex",password="123") #普通用户,密文
    User.objects.create_superuser(username
    ="alex",password="123") #超级用户,密文 ,必须有email字段,可以为空

     

  • 相关阅读:
    让服务器iis支持.apk文件下载的设置方法
    找不到匹配控制器
    Session_Start
    在SQLSERVER中创建聚集索引
    nvm 安装
    web访问命令行
    devmapper: Thin Pool has 162394 free data blocks which is less than minimum required 163840 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior
    服务器使用赛风
    java jpa 报错
    ssh 设置反向代理
  • 原文地址:https://www.cnblogs.com/tjp40922/p/10259306.html
Copyright © 2011-2022 走看看