Auth模塊數據庫
1、什麼是auth模塊django
Auth模塊是Django自帶的用戶認證模塊後端
Auth模塊是Django自帶的用戶認證模塊,能夠實現包括用戶註冊、用戶登陸、用戶認證、註銷、修改密碼等功能。默認使用 auth_user 表來存儲用戶數據。session
2、Auth模塊使用app
1.建立超級用戶 (createsuperuser)函數
建立超級用戶就是在auth_user表中插入數據,密碼是加密的。網站
在 Run manage.py Task 建立ui
createsuperuser
2.查詢用戶(authenticate())加密
驗證用戶名以及密碼是否正確,通常須要username 、password兩個關鍵字參數。若是認證成功(用戶名和密碼正確有效),便會返回一個 User 對象url
from django.contrib import auth user_obj = auth.authenticate(request, username=name, password=pwd)
不能使用filter這種查詢方法,由於user表存的密碼是加密的
models.User.objects.filter(username=username,password=password).first()
3.登陸用戶(login())
該函數接收一個HttpRequest對象,以及一個通過查詢認證的user_obj
登陸以後,會將用戶狀態記錄到session中
from django.contrib import auth auth.login(request,user_obj)
4.登陸成功
只要執行了上面那句話登陸成功,你就能夠在後端任意位置經過request.user獲取到當前用戶對象
user_obj = request.user
5.判斷用戶是否登陸(is_authenticated)
用來判斷當前請求是否經過了認證,若是經過就是true,反之false
request.user.is_authenticated
6.登陸認證裝飾器
快捷的給某個視圖添加登陸校驗。
若用戶沒有登陸,則會跳轉到django默認的登陸URL'/accounts/login/',並傳遞當前訪問url的絕對路徑(登陸成功後,會重定向回到該路徑)
若是自定義了登陸URL,則須要在settings.py文件中經過LOGIN_URL 設置登陸路徑
from django.contrib.auth.decorators import login_required @login_required(login_url='/xxx/') # 局部配置 直接在裝飾器裏面寫一個登陸路徑 def index(request): pass
# 全局配置 settings文件中寫 LOGIN_URL = '/xxx/' 設置完後直接寫裝飾器 @login_required 就能夠
7.註冊超級用戶和普通用戶
錯誤方法:User.objects.create(username =username,password=password) # 建立用戶名的時候 千萬不要再使用create 了 User.objects.create_user(username =username,password=password) # 建立普通用戶 User.objects.create_superuser(username =username,password=password,email='123@qq.com') # 建立超級用戶 郵箱必填
8.校驗密碼(check_password())
#校驗密碼 request.user.check_password(old_password)
9.修改密碼(set_password())
注意:修改密碼的時候,必定要save保存,不然不會生效
request.user.set_password(new_password)
request.user.save()
10.退出登陸(logout())
當調用該函數時,當前請求的session信息會所有清除,至關於request.session.flush().該用戶即便沒有登陸,使用該函數也不會報錯
auth.logout(request)
11.User對象的其餘屬性
# 在網站上線之前,將is_active和is_staff設置爲False is_active # 禁止登陸網站(用戶還存在,封號) is_staff # 是否對網站有管理權限(能不能登陸admin) request.user.is_active = False request.user.is_staff = False
3、自定義auth_user表
1.方法一:定義一個表模型,跟User一對一關聯(不推薦使用)
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)
2.方法二:使用類的繼承,繼承(AbstractUser)
from django.contrib.auth.models import AbstractUser class Userinfo(AbstractUser): # 千萬不要跟原來表中的字段重複 只能創新 phone = models.BigIntegerField() avatar = models.CharField(max_length=32)
注意:
1.一旦咱們經過繼承來實現擴展auth_user表,那麼作數據庫遷移,之後就沒有auth_user這個表了,之後認證組件用的表就是UserInfo。原來使用 auth_user 表模型的地方所有要用新的表模型——UserInfo(這個是你自定義的模型類) 2.告訴django再也不使用auth默認的表,而是使用你自定義的表,須要在settings.py中設置 AUTH_USER_MODEL = 'app01.Userinfo' '應用名.類名'