一、Auth模塊之auth_user表
在創建Django項目之后直接執行數據遷移命令會自動生成許多表。
Django在啟動之后就可以直接訪問admin路由,需要輸入用戶名和密碼,數據參考的就是auth_user表,並且必須使管理員用戶才能進入
依賴於auth_user表完成用戶相關的所有功能
創建超級用戶(管理員)
>> python manage.py createsuperuser
二、Auth方法
1、對比用戶名和密碼是否正確
# 去auth_user表里面去校驗數據,括號內必須同時傳入用戶名和密碼
user_obj = auth.authenticate(request,uname=username, pwd=password)
print(user_obj) # 用戶對象
print(user_obj.uname) # 用戶名
print(user_obj.pwd) # 加密密碼
2、保存用戶狀態
auth.login(request, user_obj) # 類似於request.session[key]=user_obj
3、判斷當前用戶是否登錄
request.user.is_authenticated()
4、獲取當前登錄用戶
request.user
5、校驗用戶是否登錄裝飾器
from django.contrib.auth.decorators import login_required
# 局部配置
@login_required(login_url='/login/') # 校驗失敗跳轉頁面
# 全局配置,配置文件中配置
LOGIN_URL = '/login/'
'''
1.如果局部和全局都有
局部 > 全局
2.局部和全局那個好
全局的好處在與無需重復寫代碼,但是跳轉的頁面卻很單一
局部的好處在與不同的視圖函數在用戶沒有登錄的情況下可以跳轉到不同的頁面。
'''
6、對比原密碼
request.user.check_password(old_password) # 返回值為布爾值
# 括號內為舊密碼
# 會自動和auth_user表中的密碼做比對
7、修改密碼
request.user.set_password(new_password) # 只是修改對象屬性
request.user.save() # 這才是真正的操作數據庫修改密碼
8、注銷
auth.logout(request)
9、注冊
# 操作auth_user表寫入數據
from django.contrib.auth.models import User # 導入auth_user表
# 創建普通用戶
User.objects.create_user(username = username, password = password)
# 創建超級用戶,不介意使用
User.objects.create_superuser(username=username,email='xxx@qq.com',password=password)
三、擴展auth_user表
當我們的auth_user表中的字段不夠我們使用時就需要擴展auth_user表中的字段,有兩種方法:
如果自己寫表替代了auth_user那么auth模塊的功能還是照常使用,參考的表頁由原來的auth_user變成了UserInfo
第一種:一對一關系(不推薦)
form django.db import models
form django.contrib.auth.models import User, AbstractUser
class UserInfo(models.Model):
phone = models.BigIntegerField()
user = models.OneToOneField(to='User')
第二種:面向對象的繼承
面向對象的繼承前提:
1、在繼承之前沒有執行過數據庫遷移命令
auth_user沒有被創建,如果當前庫已經創建了那么就需要換個庫
2、繼承的類里面不要覆蓋AbstractUser里面的字段名
表里面有的字段都不要動,只擴展額外字段即可
3、需要在配置文件中告訴Django你要用UserInfo代替auth_user
AUTH_USER_MODEL = 'app01.UserInfo' ——> '應用名 . 表名'
from django.contrib.auth.models import User,AbstractUser
class UserInfo(AbstractUser):
phone = models.BigIntegerField() # 額外字段
"""
如果繼承了AbstractUser
那么在執行數據庫遷移命令的時候auth_user表就不會再創建出來了
而UserInfo表中會出現auth_user所有的字段外加自己擴展的字段
這么做的好處在於你能夠直接點擊你自己的表更加快速的完成操作及擴展
"""