1. 程式人生 > 其它 >Django-Auth模組之auth_user表

Django-Auth模組之auth_user表

一、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、校驗使用者是否登入裝飾器

form 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='[email protected]',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所有的欄位外加自己擴充套件的欄位
    這麼做的好處在於你能夠直接點選你自己的表更加快速的完成操作及擴充套件
"""