Auth模塊使用方法大全


auth認證

導包

from django.contrib import auth

默認數據庫中使用auth_user表

創建超級用戶

python manage.py createsuperuser

驗證登陸

auth.authenticate(request,username,password)

校驗用戶密碼和賬號,通過返回具體的用戶對象

添加session,標識已登陸

auth.login(request,user)

接受request和前面通過登陸驗證的user對象,將session key保存在瀏覽器,數據保存在django_session表中。

登陸驗證裝飾器

用來裝飾需要登陸后給瀏覽器添加session后才能訪問的視圖添加檢測,如果有session則放行,否則跳轉指定頁面,通常我們設置成登陸頁面。

#導入auth 登陸裝飾器
from django.contrib.auth.decorators import login_required

#在需要登陸后才能訪問的頁面視圖前面添加裝飾器
@login_required
def index():
    pass

這樣瀏覽器在訪問index頁面時,會先檢查是否有session,如果沒有,則跳轉默認頁面,並將原訪問頁面作為get參數放在跳轉頁面中,在登陸成功后會跳轉之前要訪問的頁面

http://127.0.0.1:8000/accounts/login/?next=/index/
# 例如我要訪問index頁面,但是我沒session,
# 這時裝飾器會默認跳轉到/accounts/login/頁面,
# 並將index頁面的url以next參數的形式包含在其中
#,這樣在你登陸后,還能返回原頁面

可以在django的settings中修改裝飾器默認跳轉的Url

#配置auth認證登陸裝飾器的默認跳轉地址
LOGIN_URL = '/login/'

注銷方法

auth.logout(request)

接受一個request,清除當前request中的session並在數據表中django_session數據也會被清除。
常用方法,搭配一個視圖使用:

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

例如在頁面上使用a標簽和button按鈕點擊跳轉注銷視圖,注銷后跳回登陸頁面

request.user屬性

auth組件的中間間中做了這樣一個事情,當request請求來時,判斷是否有session,如果有session則會根據session去django_session中找出相應的用戶的信息,並賦值給request.user屬性,也就是request.user=user是一個User數據對象,否則返回一個匿名的對象給request.user,該對象調用所有的方法都返回None

def index(request):
    print(request.user)
# 是一個懶加載數據對象

這時我們可以把request.user當作一個普通的orm中的數據對象

is_authenticated

判斷用戶對象是否通過了校驗

request.user.is_authenticated
# 返回一個布爾值

實例

from django.shortcuts import render,HttpResponse,redirect
from django.contrib import auth
from django.contrib.auth.decorators import login_required
# Create your views here.

def login(request):
    if request.method=='POST':
        username = request.POST.get('username')
        pwd = request.POST.get('password')
        print(username,pwd)
        #利用auth驗證用戶名和密碼是否正確驗證成功實例化一個數據對象否則返回none
        user = auth.authenticate(request,username=username,password=pwd)
        if user:
            #登錄成功后,給登錄用戶在request中增加session,存在數據庫
            auth.login(request,user)
            return redirect('/index/')
        else:
            msg = '錯誤'
            print('用戶名錯誤')
            return redirect('/index/')

    return render(request,'login.html')


def logout(request):
    auth.logout(request)
    return redirect('/login/')
@login_required()
def index(request):
    print(request.session.__dir__)
    print(request.user.password)
    return render(request,'Index.html')

auth中user表的使用

因為auth中的用戶表存的密碼是密文形式,所以不能直接使用orm中creat語句

#導入user表
from django.contrib.auth.models import User

def register(request):
    form_objs = UserInfoForm()
    if request.method=='POST':
        form_objs= UserInfoForm(request.POST)
        if form_objs.is_valid():
            username = form_objs.cleaned_data['name']
            password = form_objs.cleaned_data['pwd']
            #只能使用auth表的create_user方法去創建用戶
            User.objects.create_user(username=username,password=password)
            return redirect('/login/')
    return render(request,'register.html',locals())

創建超級用戶的方法和上面一樣,只不過變成User.objects.create_superuser

校驗密碼和設置密碼

在用戶登陸成功后通常需要驗證密碼和修改密碼,auth組件也提供了相應的方法

# user為User表具體的對象,接受一個密碼,返回布爾值
user.check_password(password)


# user為User表具體的對象,接受一個密碼,修改原密碼,一定要記得save()保存
user.set_password(password)
user.save()

擴展auth_user自定義表

1. 建表繼承AbstractUser

from django.db import models

# Create your models here.
from django.contrib.auth.models import  AbstractUser

class UserInfo(AbstractUser):
    #編寫擴展字段,然后去settings告訴django auth組件會用這張表
    phone =models.CharField(max_length=11)

2. 在django配置指定

AUTH_USER_MODEL = app01.UserInfo
#格式:app名稱.表名

總結

auth認證
		默認Django內置的認證系統, 默認在數據庫中使用auth_user
		from django.contrib import auth
1. 創建一個超級用戶
	python manage.py createsuperuser
2. 驗證用戶名和密碼是否正確
	user = auth.authenticate(request, username, password)
3. 登錄
	auth.login(request, user)   --> user是上一步的得到的user對象
4. 注銷
	auth.logout(request)        --> 將當前請求的session數據刪除

5. 登錄認證的裝飾器
	auth.decorators.login_required
	默認跳轉的登錄url: /accounts/login/
	在settings.py中 配置 LOGIN_URL = "你的登錄url"

6. is_authenticated()
	判斷當前request.user是否經過認證,經過認證就返回True,否則是False
	
7. AuthenticationMiddleware中間件究竟做了什么?
	request.user = user, 匿名用戶對象
	
auth_user表的方法
    8. create_user()
    創建用戶,不同與普通orm目的是使密碼加密保存
    9. create_superuser()
    創建超級用戶
    10. check_password()
    檢查密碼
    11. set_password()
    設置密碼

使用流程:

  1. 登陸時校驗用戶密碼 auth.authenticate(username,password)生成user對象
  2. 給通過校驗的user對象添加session, auth.login(request,user)
  3. 添加session成功后,后續的請求,request.user=user對象,可拿到數據庫數據
  4. 注銷,auth.logout(request),將瀏覽器保存的sessionkey清除掉
  5. user表的創建用戶,不同於普通orm操作,因為密碼需要加密保存,User.objects.create_user(), User.objects.create_superuser().
  6. user對象的方法:user.check_password(password),user.set_password(passord)
  7. 判斷用戶是否通過校驗,request.user.is_authenticated(),返回一個布爾值(不常用)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM