Django做爲一個完美主義者的終極框架,它內置了強大的用戶認證系統--auth,執行數據庫遷移的那兩條命令時,即便咱們沒有建表,它默認幫咱們建立auth_user 表來存儲用戶數據。html
在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 中輸入createsuperuser
ide
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')
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頁面')
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')
logout()
註銷登陸用戶
auth.logout(request)