Auth模塊使用方法大全

auth認證

導包

from django.contrib import auth

默認數據庫中使用auth_user表javascript

建立超級用戶

python manage.py createsuperuser

驗證登錄

auth.authenticate(request,username,password)

校驗用戶密碼和帳號,經過返回具體的用戶對象html

添加session,標識已登錄

auth.login(request,user)

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

登錄驗證裝飾器

用來裝飾須要登錄後給瀏覽器添加session後才能訪問的視圖添加檢測,若是有session則放行,不然跳轉指定頁面,一般咱們設置成登錄頁面。python

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

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

這樣瀏覽器在訪問index頁面時,會先檢查是否有session,若是沒有,則跳轉默認頁面,並將原訪問頁面做爲get參數放在跳轉頁面中,在登錄成功後會跳轉以前要訪問的頁面nginx

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

能夠在django的settings中修改裝飾器默認跳轉的Urldocker

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

註銷方法

auth.logout(request)

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

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

例如在頁面上使用a標籤和button按鈕點擊跳轉註銷視圖,註銷後跳回登錄頁面django

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中的數據對象ruby

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(),返回一個布爾值(不經常使用)
相關文章
相關標籤/搜索