驗證功能auth

django.contrib.auth.models import Userhtml

User 是django默認管理整個項目的用戶表,它繼承了AbstractUser這個類,實際上咱們操做的就是AbstractUser表,只是換了一個名字python

導入auth:from django.contrib import authdjango

先明白驗證的做用:後端

 - 限制瀏覽器行爲,根據狀況不讓它訪問瀏覽器

django經過用戶表驗證,用戶登錄,用戶退出,超時退出,設置權限,設置無權訪問訪問跳轉頁面實現這個功能cookie

  - 用戶表驗證表驗證動做,authenticate()方法返回一個AbstractUser對象。session

  user = auth.authenticate(username='theuser',password='thepassword'),獲取驗證表對象app

   u.is_authenticated==True 能夠用做if判斷。ui

  - 標註用戶的登錄狀態,例子裏的user是上一行的user.spa

  -auth.login(request,user),根據驗證結果登陸,無返回值

    在請求中保留用戶ID和後端。這樣一來,用戶就沒必要在每一個請求上從新認證。注意,匿名會話期間的數據集在用戶登陸時保留。

    顯然在瀏覽器中的cookie中留下了一個標識 

   - 用戶退出

  - loginout(request),退出登錄,清空用戶的session,無返回值,      

   -設置權限

  -須要登陸的視圖

    -引入裝飾器:from django.contrib.auth.decorators import login_required

    -在視圖上加入:@login_required

  - 用戶表驗證表添加用戶,刪除用戶,修改密碼

  - 增長用戶    

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

  - 增長超級用戶

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

    - 檢查用戶密碼正確與否:

ok = user_obj.check_password('密碼')
或着:
ok = request.user.check_password(raw_password='原密碼')

   - 修改密碼

user_obj.set_password('新密碼')
user_obj.save()

   -  用戶修改密碼後端實例

@login_required  #先登錄
def set_password(request):
    user = request.user  #獲取驗證結果
    err_msg = ''
    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:
                err_msg = '新密碼不能爲空'
            elif new_password != repeat_password:
                err_msg = '兩次密碼不一致'
            else:
                user.set_password(new_password)
                user.save()
                return redirect("/login/")
        else:
            err_msg = '原密碼輸入錯誤'
    content = {
        'err_msg': err_msg,
    }
    return render(request, 'set_password.html', content)  

  - 設置無權訪問訪問跳轉頁面

在 setting.py文件中

LOGIN_URL = '/login/'  # 這裏配置成你項目登陸頁面的路由,自定義

  

自定義用戶表 

from django.contrib.auth.models import AbstractUser 
class UserInfo(AbstractUser): 
    """
    用戶信息表
    """    
    phone = models.CharField(max_length=11, null=True, unique=True)   #增長自定義字段
    
    def __str__(self):
        return self.username  

替代原生USER表

setting.py中:
AUTH_USER_MODEL = "app名.UserInfo"

  

參考

相關文章
相關標籤/搜索