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字段,可以为空

 

 

 

 

 

posted @ 2019-01-12 12:27  阿布_alone  阅读(316)  评论(0编辑  收藏  举报
TOP