目錄python
Auth模塊是Django自帶的用戶認證模塊,能夠實現包括用戶註冊、用戶登陸、用戶認證、註銷、修改密碼等功能。默認使用 auth_user 表來存儲用戶數據。數據庫
建立超級用戶就是在auth_user表中插入數據,密碼是加密的,所以不能手動在數據庫中插入數據django
python3 manage.py createsuperuser
from django.contrib.auth.models import User user = User.objects.create_superuser(username='用戶名',password='密碼',email='郵箱',...)
驗證用戶名以及密碼是否正確,通常須要username 、password兩個關鍵字參數。若是認證成功(用戶名和密碼正確有效),便會返回一個 User 對象後端
from django.contrib import auth user = auth.authenticate(request, username=name, password=pwd)
至關因而在數據庫中查詢:session
user=models.User.objects.filter(name=name,pwd=pwd).first()
該函數接受一個HttpRequest對象,以及一個通過認證的User對象。app
該函數實現一個用戶登陸的功能。它本質上會在後端爲該用戶生成相關session數據。函數
user = auth.authenticate(username=username, password=password) if user is not None: login(request, user) return HttpResponse('登陸成功')
一旦登陸成功,調了這個函數login(request,user),在之後的視圖類(函數)中的request中就會有一個user對象,就是當前已登陸的用戶對象。網站
該函數接受一個HttpRequest對象,無返回值。ui
當調用該函數時,當前請求的session信息會所有清除,即調用request.session.flush()。該用戶即便沒有登陸,使用該函數也不會報錯。加密
auth.logout(request)
快捷的給某個視圖添加登陸校驗。
若用戶沒有登陸,則會跳轉到django默認的 登陸URL '/accounts/login/ ' 並傳遞當前訪問url的絕對路徑 (登錄成功後,會重定向到該路徑)。
若是須要自定義登陸的URL,則須要在settings.py文件中經過LOGIN_URL進行修改。
from django.contrib.auth.decorators import login_required @login_required(redirect_field_name='eee',login_url='/login/') # redirect_field_name:修改?後面的key值,通常不回去修改 # login_url:若是沒有登陸,跳轉到的頁面 # login_url局部配置 @login_required(login_url='/login/') # login_url全局配置 # 在setting文件中配置 LOGIN_URL='/login/' 直接使用 @login_required
from django.contrib.auth.models import User user = User.objects.create_user(username='用戶名',password='密碼',email='郵箱',...)
# 先拿到用戶(能夠是登陸用戶,能夠現查) user = request.user # 或者 user = authenticate(username=username, password=password) pwd = request.POST.get('pwd') ret = user.check_password(pwd)
修改密碼時,能夠先校驗原密碼輸入是否正確,原密碼正確再開始修改密碼
user.set_password(pwd) user.save()
用來判斷當前請求是否經過了認證。若是經過驗證,是true,反之false
ret = request.user.is_authenticated()
刪除用戶和用orm在表中刪除數據同樣
# 在網站上線之前,將is_active和is_staff設置爲False is_active # 禁止登陸網站(用戶還存在,封號) is_staff # 是否對網站有管理權限(能不能登陸admin) request.user.is_active = False request.user.is_staff = False
from django.contrib.auth.models import User class UserDetail(models.Model): phone=models.CharField(max_length=32) # 一對一跟auth_user表作關聯 # 若是是從外部引入的表模型,是不能加引號的 # 若是加引號,只是在當前model找 user=models.OneToOneField(to=User)
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): # username,password...都繼承了 phone=models.CharField(max_length=32) sex=models.BooleanField()
一旦咱們經過繼承來實現擴展auth_user表,那麼作數據庫遷移,之後就沒有auth_user這個表了,之後認證組件用的表就是UserInfo。原來使用 auth_user 表模型的地方所有要用新的表模型——UserInfo
引用Django自帶的User表,繼承使用時須要設置,在setting中對新表進行配置:
AUTH_USER_MODEL ='app01.UserInfo'