1. 程式人生 > 實用技巧 >django框架之十一 --------Auth模組

django框架之十一 --------Auth模組

Auth模組

一、什麼是auth模組

Auth模組是django自帶的使用者認證模組

Auth模組是由django自帶的使用者認證模組,可以實現包括使用者註冊、使用者登入、使用者認證、登出、修改密碼等功能。預設使用auth_user表來儲存使用者資料。

二、Auth模組使用

1、建立超級使用者(createsuperuser)

建立超級使用者就是在auth_user表中插入資料,密碼是加密的

在Run manage.py Task 建立

createsuperuser

2、查詢使用者(authenticate())

驗證使用者名稱以及密碼是否正確,一般需要username、password兩個關鍵字引數。如果認證成功(使用者名稱和密碼正確有效),便會返回一個User物件。

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())

該 函式接受一個HttpResponse物件,以及一個經過查詢認證的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='[email protected]')  # 建立超級使用者  郵箱必填

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

三、自定義auth_user表

1.方法一:定義一個表模型,跟User一對一關聯(不推薦使用)

from django.contrib.auth.models import  User

class  UserDetail(models.Model):
        phone = models.CharField(max_lenth=32)
        #一對一跟auth_user表做關聯
        #如果是從外部引入的表模型,是不能加引號的
        #如果加引號,只是在當前models找
        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'   '應用名.類名'