1. 程式人生 > >Django之使用者認證元件

Django之使用者認證元件

  使用者認證元件用的是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