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"