Django框架(十三)——Auth模塊

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'   '應用名.類名'
相關文章
相關標籤/搜索