Django之用戶認證組件

  • 2020 年 1 月 21 日
  • 筆記

  用戶認證組件用的是Django自帶一個表:auth_user

  一、auth模組

  1,authenticate()判斷用戶是否存在方法

user=authenticate(username='xxx',password='xxxx')   #需要提供兩個參數,username,password關鍵字參數  如果auth_user表中存在這個用戶,會返回一個user對象,如果用戶不存在,返回None

  2,login(request,user)

login(request,user)主要完成以下:把用戶的id放入session表中的數據里  1,注入session資訊:request.session['user_id']=user.pk    from django.contrib.auth import authenticate, login    def my_view(request):    username = request.POST['username']    password = request.POST['password']    user = authenticate(username=username, password=password)    if user is not None:      login(request, user)      # Redirect to a success page.      ...    else:      # Return an 'invalid login' error message.

  3,logout(request)註銷用戶

from django.contrib.auth import logout    def logout_view(request):    logout(request)         #註銷只是session表裡的登錄記錄,並不是註銷的auth_user表的記錄    # Redirect to a success page.

  二、user對象

  只要登錄過的用戶,訪問任何視圖的時候都可以使用request.user對象,這就是一個user對象,request.user.name就可以拿到用戶的名字,request.user.email就可以得到用戶的郵箱,還可以拿到用戶的其他資訊。除此之外,user對象還擁有以下方法:

  1,user對象的is_authenticated()

  如果session表裡有你的登錄記錄,那返回值為True,可以用來驗證用戶是否登錄過。

  1.1 我們可以自己在每個需要判斷的是否登陸過才能訪問的視圖裡面手動寫上判斷,而且登陸後直接返回最開始請求的頁面。

def my_view(request):    if not request.user.is_authenticated():      return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

  1.2 Django自己給我們封裝一個裝飾器,用來判斷用戶是否登錄過,就和我們用session寫的裝飾器一樣的,只是現在也是登錄成功後返回最開始的頁面。

from django.contrib.auth.decorators import login_required    @login_required  def my_view(request):

  2,在auth_user表中添加記錄,相當於添加一個用戶

from django.contrib.auth.models import User  User.objects.create_user(username='',password='')  User.objects.create_superuser(username="alex",password="123")

  3,check_password(password)

  用戶需要修改密碼之前,首先得讓他輸入原來的密碼,如果輸入正確返回True,否則返回None,當返回True時,才允許修改密碼

  4,set_password()修改密碼

user = User.objects.get(username='')  user.set_password(password='')  user.save