Django Auth認證模塊

Author模塊介紹

Django做爲一個完美主義者的終極框架,它內置了強大的用戶認證系統--auth,執行數據庫遷移的那兩條命令時,即便咱們沒有建表,它默認幫咱們建立auth_user 表來存儲用戶數據。html

自定義Auth表單

modles.py建立表單模型能夠對AbstractUser進行繼承。由於咱們能夠從源碼中看出來 Auth 自帶的auth_user表繼承AbstractUser類,全部咱們能夠一樣繼承它,而後對於他的內容進行自定義數據庫

AbstractUser自帶的字段django

username :帳號
first_name:姓
last_name:名
email:郵箱
is_staff : 用戶是否擁有網站的管理權限.
is_active: 是否容許用戶登陸, 設置爲 False,能夠在不刪除用戶的前提下禁止用戶登陸。
date_joined:建立日期

自定義表

1.類的繼承後端

from django.contrib.auth.models import User,AbstractUser

class Userinfo(AbstractUser):
    #擴展字段
    phone = models.BigIntegerField() #擴展的字段儘可能不要與原先表中字段衝突

2.配置文件settings.pysession

AUTH_USER_MODEL = '應用名.表名'

'''
配置後django會將Userinfo表來替換默認自帶的auth_user表
'''

建立超級用戶框架

咱們能夠在pycharm中使用導航欄中的Tools裏的run manage.py Task 中輸入createsuperuseride

註冊相關:

create_user()網站

auth 提供的一個建立新用戶的方法,須要提供必要參數(username、password)等。ui

用法:url

from django.contrib.auth.models import User
user = User.objects.create_user(username='用戶名',password='密碼',...)

create_superuser()

auth 提供的一個建立新的超級用戶的方法,須要提供必要參數(username、password、email)等。

用法:

from django.contrib.auth.models import User
user = User.objects.create_superuser(username='用戶名',password='密碼',email='郵箱',...)

示例:

from django.contrib import auth
from django.contrib.auth.models import User
def register(request):
    if request.method =='POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # User.objects.create(username=username,password=password) # 這種方式不能使用,由於密碼是明文的
        # User.objects.create_user(username=username,password=password) #建立普通用戶
        User.objects.create_superuser(username=username,password=password,email='123@qq.com') #建立超級用戶
    return render(request,'register.html')
views.py

登陸相關

authenticate()

提供了用戶認證功能,即驗證用戶名以及密碼是否正確,通常須要username 、password兩個關鍵字參數

登陸成功返回的是用戶對象,錯誤返回None。

user = auth.authenticate(request,username=username,password=password)

login()

保存用戶登陸狀態,會自動在後端爲該用戶生成相關session數據

#若用戶登陸成功,拿到user對象        
if user:
    #保存用戶登陸狀態
    auth.login(request,user)
    '''
    只要執行了這一句話,以後在任意能夠獲取到request對象的地方
    均可以經過request.user獲取到當前登陸的用戶對象
    '''

is_authenticated()

用來判斷當前請求是否經過了認證,返回布爾值

request.user.is_authenticated()

校驗用戶是否登陸裝飾器 @login_required

方式一:局部配置

@login_required(login_url='/login')  #加參數 若未登陸就跳轉到指定的登陸頁面
def xxx(request):
    return HttpResponse('xxx頁面')   

方式二:全局配置

views.py

@login_required
def xxx(request):
    return HttpResponse('xxx頁面')

在settings.py中加入如下代碼

LOGIN_URL = '/login/'

注意:若兩種方法都有,則先執行方式一的

登陸綜合示例:

def login(request):
    if request.method =='POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = auth.authenticate(request,username=username,password=password)  #返回值user是一個對象
        # print(user)
        # print(user.username)
        # print(user.password)
        '''
        用戶名密碼正確返回的是用戶對象
        錯誤返回None
        '''
        if user:
            #保存用戶登陸狀態
            auth.login(request,user)
            '''
            只要執行了這一句話,以後在任意能夠獲取到request對象的地方
            均可以經過request.user獲取到當前登陸的用戶對象
            '''
            return HttpResponse('登陸成功')
    return render(request,'login.html')

def get_user(request):
    print(request.user)
    '''
    用戶登陸成功以後,request.user拿到的就是用戶對象 user
    沒有登陸,獲取到的是匿名用戶 AnonymousUser
    '''
    print(request.user.is_authenticated())  #返回的是布爾值,確認用戶是否登陸
    return HttpResponse('get_user')


# 校驗用戶是否登陸裝飾器
from django.contrib.auth.decorators import login_required

@login_required(login_url='/login')  #加參數 跳轉到指定的登陸頁面
# @login_required
def xxx(request):
    return HttpResponse('xxx頁面')
Views.pys

密碼相關

check_password(password)

校驗密碼是否正確,密碼正確返回True,不然返回False

is_right = request.user.check_password(old_password)

set_password(new_password)

設置新密碼,傳新密碼看成參數,設置完必定要調用用戶對象的save方法。

request.user.set_password(new_password)
request.user.save()  #這步必定要作,保存到數據庫

修改密碼綜合示例:

@login_required
def set_password(request):
    if request.method =='POST':
        old_password = request.POST.get('old_password')
        new_password = request.POST.get('new_password')
        #1 先校驗舊密碼是否正確
        is_right = request.user.check_password(old_password)
        print(is_right)
        #2 修改新密碼
        if is_right:
            request.user.set_password(new_password)
            request.user.save()  #這步必定要作,保存到數據庫
    return render(request,'set_password.html')
views.py

註銷相關

logout()

註銷登陸用戶

auth.logout(request)
相關文章
相關標籤/搜索