django自帶的使用者系統

2021-10-25 14:45:23 字數 3471 閱讀 3733

基本上在任何**上,都無可避免的需要設計實現**的使用者系統。此時我們需要實現包括使用者註冊、使用者登入、使用者認證、登出、修改密碼等功能。

使用django,我們可以不需要自己寫這些功能,因為django內建了強大的使用者認證系統–auth,它預設使用 auth_user 表來儲存使用者資料。

from django.contrib import auth # 使用auth認證系統

from django.contrib.auth.models import user # auth認證系統預設使用user表

注意:命令列建立超級使用者 python manage.py createsuperuser

提供了使用者認證功能,即驗證使用者名稱以及密碼是否正確,一般需要username 、password兩個關鍵字引數。

如果認證成功(使用者名稱和密碼正確有效),便會返回乙個 user 物件。

authenticate(

)會在該 user 物件上設定乙個屬性(

id)來標識後端已經認證了該使用者,且該資訊在後續的登入過程中是需要的。

用法:from django.contrib import auth

# 繼承的abstractuser類 密碼必須是手動加密的 儲存

user_obj = auth.authenticate(username=username,password=pwd)

該函式接受乙個httprequest物件,以及乙個經過認證的user物件。

該函式實現乙個使用者登入的功能。它本質上會在後端為該使用者生成相關session資料。

用法:

from django.contrib.auth import authenticate, login

defmy_view

(request)

: username = request.post[

'username'

] password = request.post[

'password'

] user_obj = authenticate(username=username, password=password)

if user_obj:

login(request, user_obj)

# redirect to a success page...

.else

:# return an 'invalid login' error message...

.

注意:

只要使用login(request, user_obj)之後,request.user就能拿到當前登入的使用者物件。否則request.user得到的是乙個匿名使用者物件(anonymoususer object)。

詳細原理請檢視 authenticationmiddleware 中介軟體原始碼。

class

usermodelbackend

(modelbackend)

:"""

多方式登入

"""defauthenticate

(self, request, username=

none

, password=

none

,**kwargs)

:try

: user_obj = user.objects.get(q(username=username)

| q(phone=username)

)except user.doesnotexist:

pass

else

:if user_obj is

notnone

and user_obj.check_password(password)

:return user_obj

# 最後要告知django,自定義的類,在setting.py中配置

authentication_backends =

縮減你的**量,提高效率!

方便我們使用django的jwt操作

from django.contrib.auth.backends import modelbackend

from django.contrib.auth.hashers import make_password, check_password

class

usermodelbackend

(modelbackend)

:"""

多方式登入

"""defauthenticate

(self, request, username=

none

, password=

none

,**kwargs)

:try

: user_obj = user.objects.get(q(username=username)

| q(phone=username)

)except user.doesnotexist:

pass

else

:if user_obj is

notnone

and user_obj.check_password(password)

:return user_obj

# 在setting.py告知django使用者自定義的類

authentication_backends =

from rest_framework.permissions import allowany,isauthenticated,isadminuser

"""drf框架為我們提供了基本的許可權驗證。主要包括三種驗證

allowany  所有使用者

isauthenticated  驗證過的使用者

isadminuser  超級管理員

"""# 建立乙個許可權.py裡面可以自定義許可權類,

class

vip(basepermission)

:"""

自定義許可權類

"""message =

'vip可以訪問 '

defhas_permission

(self, request, view)

:if request.user.

id!=1:

return

false

return

true

class

vipview

(apiview)

: permission_classes =

[vip]

# 可以增加多個許可權

defget

(self, request)

:return response(

)

django 自帶的使用者系統

第一步 系統配置使用者表 首先,在models中建立使用者表,導包 from django.contrib.auth.models import abstractuser 建立使用者表 class user abstractuser username models.charfield max len...

Django自帶的使用者驗證系統

第一步 系統配置使用者表 第二步 使用者註冊和登陸驗證功能 首先,在models中建立使用者表,導包 from django.contrib.auth.models import abstractuser 建立使用者表 class user abstractuser username models....

django自帶的使用者管理系統

1.什麼是django自帶的使用者系統?django內建了auth認證系統,整個auth系統可以分為三大部分,使用者資訊,使用者許可權和使用者組,在資料庫中分別對應auth user,auth permission和auth group 2.還系統有什麼優勢 預設實現了使用者的註冊,使用者登入,使用...