from django.contrib import auth
默認數據庫中使用auth_user表html
python manage.py createsuperuser
auth.authenticate(request,username,password)
校驗用戶密碼和帳號,經過返回具體的用戶對象python
auth.login(request,user)
接受request和前面經過登錄驗證的user對象,將session key保存在瀏覽器,數據保存在django_session表中。數據庫
用來裝飾須要登錄後給瀏覽器添加session後才能訪問的視圖添加檢測,若是有session則放行,不然跳轉指定頁面,一般咱們設置成登錄頁面。django
#導入auth 登錄裝飾器 from django.contrib.auth.decorators import login_required #在須要登錄後才能訪問的頁面視圖前面添加裝飾器 @login_required def index(): pass
這樣瀏覽器在訪問index頁面時,會先檢查是否有session,若是沒有,則跳轉默認頁面,並將原訪問頁面做爲get參數放在跳轉頁面中,在登錄成功後會跳轉以前要訪問的頁面瀏覽器
http://127.0.0.1:8000/accounts/login/?next=/index/ # 例如我要訪問index頁面,可是我沒session, # 這時裝飾器會默認跳轉到/accounts/login/頁面, # 並將index頁面的url以next參數的形式包含在其中 #,這樣在你登錄後,還能返回原頁面
能夠在django的settings中修改裝飾器默認跳轉的Urlsession
#配置auth認證登錄裝飾器的默認跳轉地址 LOGIN_URL = '/login/'
auth.logout(request)
接受一個request,清除當前request中的session並在數據表中django_session數據也會被清除。
經常使用方法,搭配一個視圖使用:app
def logout(request): auth.logout(request) return redirect('/login/')
例如在頁面上使用a標籤和button按鈕點擊跳轉註銷視圖,註銷後跳回登錄頁面ui
auth組件的中間間中作了這樣一個事情,當request請求來時,判斷是否有session,若是有session則會根據session去django_session中找出相應的用戶的信息,並賦值給request.user屬性,也就是request.user=user是一個User數據對象,不然返回一個匿名的對象給request.user,該對象調用全部的方法都返回None加密
def index(request): print(request.user) # 是一個懶加載數據對象
這時咱們能夠把request.user看成一個普通的orm中的數據對象url
判斷用戶對象是否經過了校驗
request.user.is_authenticated # 返回一個布爾值
from django.shortcuts import render,HttpResponse,redirect from django.contrib import auth from django.contrib.auth.decorators import login_required # Create your views here. def login(request): if request.method=='POST': username = request.POST.get('username') pwd = request.POST.get('password') print(username,pwd) #利用auth驗證用戶名和密碼是否正確驗證成功實例化一個數據對象不然返回none user = auth.authenticate(request,username=username,password=pwd) if user: #登陸成功後,給登陸用戶在request中增長session,存在數據庫 auth.login(request,user) return redirect('/index/') else: msg = '錯誤' print('用戶名錯誤') return redirect('/index/') return render(request,'login.html') def logout(request): auth.logout(request) return redirect('/login/') @login_required() def index(request): print(request.session.__dir__) print(request.user.password) return render(request,'Index.html')
由於auth中的用戶表存的密碼是密文形式,因此不能直接使用orm中creat語句
#導入user表 from django.contrib.auth.models import User def register(request): form_objs = UserInfoForm() if request.method=='POST': form_objs= UserInfoForm(request.POST) if form_objs.is_valid(): username = form_objs.cleaned_data['name'] password = form_objs.cleaned_data['pwd'] #只能使用auth表的create_user方法去建立用戶 User.objects.create_user(username=username,password=password) return redirect('/login/') return render(request,'register.html',locals())
建立超級用戶的方法和上面同樣,只不過變成User.objects.create_superuser
在用戶登錄成功後一般須要驗證密碼和修改密碼,auth組件也提供了相應的方法
# user爲User表具體的對象,接受一個密碼,返回布爾值 user.check_password(password) # user爲User表具體的對象,接受一個密碼,修改原密碼,必定要記得save()保存 user.set_password(password) user.save()
from django.db import models # Create your models here. from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): #編寫擴展字段,而後去settings告訴django auth組件會用這張表 phone =models.CharField(max_length=11)
AUTH_USER_MODEL = app01.UserInfo #格式:app名稱.表名
auth認證 默認Django內置的認證系統, 默認在數據庫中使用auth_user from django.contrib import auth 1. 建立一個超級用戶 python manage.py createsuperuser 2. 驗證用戶名和密碼是否正確 user = auth.authenticate(request, username, password) 3. 登陸 auth.login(request, user) --> user是上一步的獲得的user對象 4. 註銷 auth.logout(request) --> 將當前請求的session數據刪除 5. 登陸認證的裝飾器 auth.decorators.login_required 默認跳轉的登陸url: /accounts/login/ 在settings.py中 配置 LOGIN_URL = "你的登陸url" 6. is_authenticated() 判斷當前request.user是否通過認證,通過認證就返回True,不然是False 7. AuthenticationMiddleware中間件究竟作了什麼? request.user = user, 匿名用戶對象 auth_user表的方法 8. create_user() 建立用戶,不一樣與普通orm目的是使密碼加密保存 9. create_superuser() 建立超級用戶 10. check_password() 檢查密碼 11. set_password() 設置密碼