Django內置模塊auth實現認證功能代碼

auth 模塊的知識點,javascript

一,用戶認證html

1,建立超級用戶(此步之因此這麼作,是用於將用戶名密碼使用命令寫入auth_user表中java

(此表不能手工寫,由於password是加密後的字串))python

python manage.py createsuperuser算法

輸入用戶名 xiaohei數據庫

輸入郵箱。。。。django

輸入密碼xiaohei1234session

去數據庫裏就能看到auth插件,auth_user表對應的信息了ide

二,views.py中的核心代碼函數

2.1導入模塊

from django.contrib import auth

2.2 驗證用戶名和密碼(若是驗證成功返回的是一個user對象,若是驗證失敗則獲得一個匿名用戶,此用戶全部屬性是null)

user=auth.authenticate(username=username1,password=pwd)

2.3 將以上經過驗證的user用戶ID保存在session中,供auth中間件使用

auth.login(request,user)

2.4

後面會用於中間件,將user封裝到request.user的屬性中

'django.contrib.auth.middleware.AuthenticationMiddleware',   ------中間件

如下第二步驟代碼概括以下:

from django.contrib import auth
def login(request):
    if request.method=='POST':
        username1=request.POST.get('username')
        pwd=request.POST.get('password')
        # 如何判斷用戶名和密碼呢
        # 如下是使用auth模塊,去數據庫裏查詢用戶信息,驗證是否存在
        user=auth.authenticate(username=username1,password=pwd)
        # 如下語句,其實仍是將以上得到認證的用戶ID保存在SESSION中,#用於後面每一個頁面根據此SESSION裏的ID,獲取用戶信息驗證,並給auth中間件使用
        auth.login(request,user)
        # 用於之後在調用每一個視圖函數前,auth中間件會根據每次訪問視圖前請求所帶的SEESION裏面的ID,去數據庫找用戶對像,並將對象保存在request.user屬性中
        # 中間件執行完後,再執行視圖函數
        if user:
            return redirect('/index/')
        else:
            return redirect('/login/')
    return render(request,'login.html')

 

三,須要進行驗證頁面的驗證(使用auth模塊裏的裝飾器login_required)

from django.contrib.auth.decorators import login_required
# 以上導入的就是一個裝飾器,用於驗證(咱們須要用戶登陸後,才能訪問,不然就跳轉到另外的頁面)
# 這個另外的頁面就默認的是/accounts/login/ 咱們也也以自定義要跳轉的地方,在settins.py中LOGIN_URL

# 例如如下頁面須要登陸成功才能訪問
@login_required
def index(request):
    print(request.user.username)
    print('===='*12)
    return render(request,'index.html')

四,若是沒有登陸則跳轉到另外的頁面,這個頁面是能夠設置的,

# 這個另外的頁面就默認的是/accounts/login/ 咱們也也以自定義要跳轉的地方,在settins.py中LOGIN_URL

settings.py文件中寫如下代碼,指定沒有登陸跳轉到登陸頁面
LOGIN_URL='/login/'

五,用戶註銷

 如下是views.py註銷代碼

from django.contrib.auth.decorators import login_required
# 以上導入的就是一個裝飾器,用於驗證(咱們須要用戶登陸後,才能訪問,不然就跳轉到另外的頁面)
# 這個另外的頁面就默認的是/accounts/login/ 咱們也也以自定義要跳轉的地方,在settins.py中LOGIN_URL

# 註銷,將session數據都刪除,而且coolies也失效,(即用戶退出登陸,並不銷戶清除數據庫裏user記錄哦。。)
def logout(request):
    auth.logout(request)
    return redirect('/login')

六,註冊(建立用戶)

 

# 建立用戶,即註冊
def register(request):
    from django.contrib.auth.models import User
    User.objects.create_user(username='alex',password='alex1234')
    return HttpResponse('o98k')

調用register視圖函數後,即建立成功後,數據庫裏的auth_user表就有對應數據了,

 八,DJango的User對象

1,User對象屬性

User 對象屬性:

username, password(必填項)password用哈希算法保存到數據庫

is_staff : 用戶是否擁有網站的管理權限.

is_active : 是否容許用戶登陸, 設置爲``False``,能夠不用刪除用戶來禁止 用戶登陸

2,User 對象方法

is_authenticated()

若是是真正的 User 對象,返回值恆爲 True 。 用於檢查用戶是否已經經過了認證。
經過認證並不意味着用戶擁有任何權限,這個方法甚至也不檢查該用戶是否處於激活狀態,只是代表用戶成功的經過了認證。

這個方法很重要, 在後臺用request.user.is_authenticated()判斷用戶是否已經登陸,若是true則能夠向前臺展現request.user.name

建立用戶

使用 create_user 輔助函數建立用戶:

from django.contrib.auth.models import User
user = User.objects.create_user(username='',password='')

user = User.objects.create_superuser(username='',password='',email='')
## 說明:create_superuser參數必須有username,password,email不然會報錯,
## 建立普通用戶,參數只有username,password便可

檢查密碼:

check_password(passwd)

用戶須要修改密碼的時候,首先要讓其輸入原來的密碼 ,若是給定的值經過了密碼檢查,返回 True

修改密碼

使用 set_password() 來修改密碼

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

修改密碼示例:

def register(request):
    from django.contrib.auth.models import User
    # 建立用戶
    user_obj=User.objects.create_user(username='alex6',password='alex1234')
    # 檢查密碼(通常用於修改密碼前驗證)
    ret=user_obj.check_password('alex12345')
    print(ret)  #返回False
    # 修改密碼
    user_obj.set_password('alex12345')
    # 修改後保存
    user_obj.save()
    # 修改後再檢查
    ret=user_obj.check_password('alex12345')
    print (ret)  # 返回True
    return HttpResponse('o98k')

 

 

簡單示例

def sign_up(request):
 
    state = None
    if request.method == 'POST':
 
        password = request.POST.get('password', '')
        repeat_password = request.POST.get('repeat_password', '')
        email=request.POST.get('email', '')
        username = request.POST.get('username', '')
        if User.objects.filter(username=username):
                state = 'user_exist'
        else:
                new_user = User.objects.create_user(username=username, password=password,email=email)
                new_user.save()
 
                return redirect('/book/')
    content = {
        'state': state,
        'user': None,
    }
    return render(request, 'sign_up.html', content) 
註冊示例代碼
@login_required
def set_password(request):
    user = request.user
    state = None
    if request.method == 'POST':
        old_password = request.POST.get('old_password', '')
        new_password = request.POST.get('new_password', '')
        repeat_password = request.POST.get('repeat_password', '')
        if user.check_password(old_password):
            if not new_password:
                state = 'empty'
            elif new_password != repeat_password:
                state = 'repeat_error'
            else:
                user.set_password(new_password)
                user.save()
                return redirect("/log_in/")
        else:
            state = 'password_error'
    content = {
        'user': user,
        'state': state,
    }
    return render(request, 'set_password.html', content)
修改密碼示例
相關文章
相關標籤/搜索