使用步驟:
專注于為中小企業(yè)提供網(wǎng)站設(shè)計、網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)南平免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
# 通過認證類完成,使用步驟
1 寫一個認證類,繼承BaseAuthentication
2 重寫authenticate方法,在內(nèi)部做認證
3 如果認證通過,返回2個值
4 認證不通過拋AuthenticationFailed異常
5 只要返回了兩個值,在后續(xù)的request.user 就是當前登錄用戶
認證源碼分析:
https://www.cnblogs.com/suncolor/p/.html
認證組件的使用:
1.models.py中編寫模型類
# 用戶表
class User(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
def __str__(self):
return self.username
# 用戶登錄記錄表
# 如何區(qū)分用戶是否登錄了?
class UserToken(models.Model):
# SET_NULL SET_DEFAULT CASCADE SET(函數(shù)內(nèi)存地址)
user = models.OneToOneField(to='User', on_delete=models.CASCADE)
token = models.CharField(max_length=32, null=True) # 用戶如果沒有登錄,就是空,如果登錄了,就有值,登錄多次以最后一次為準
2.views.py中判斷登錄信息
class UserView(ViewSet):
authentication_classes = []
@action(methods=['POST', ], detail=False, url_path='login')
def login(self, request):
# 取出前端傳入的用戶名密碼,校驗,通過,返回登錄成功,失敗就返回用戶名密碼錯誤
username = request.data.get('username')
password = request.data.get('password')
user = User.objects.filter(username=username, password=password).first()
if user:
# 登錄成功,不同人生成的token是不一樣的,誰登錄的,就把token存到UserToken表中
token = str(uuid.uuid4()) # 生成一個永不重復(fù)的隨機字符串
# 存UserToken:如果沒有記錄,就是新增,如果有記錄更新一下即可
# 通過user去UserToken表中查數(shù)據(jù),如果能查到,使用defaults的數(shù)據(jù)更新,如果查不到,直接通過user和defaults的數(shù)據(jù)新增
UserToken.objects.update_or_create(defaults={'token': token}, user=user)
# 作用是為了添加數(shù)據(jù)時防止重復(fù). 先去查詢, 如果沒有在創(chuàng)建, 如果有則更新.
return Response({'code': 100, 'msg': '登錄成功', 'token': token})
else:
return Response({'code': 101, 'msg': '用戶名或密碼錯誤'})
# 在app中寫一個認證類 app_auth.py
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from app01.models import UserToken
class MyAuthentication(BaseAuthentication):
def authenticate(self, request):
# 認證邏輯,如果認證通過,返回兩個值
#如果認證失敗,拋出AuthenticationFailed異常
token=request.GET.get('token')
if token:
user_token=UserToken.objects.filter(token=token).first()
# 認證通過
if user_token:
return user_token.user,token
else:
raise AuthenticationFailed('認證失敗')
else:
raise AuthenticationFailed('請求地址中需要攜帶token')
# 可以有多個認證,從左到右依次執(zhí)行
# 全局使用,在setting.py中配置
REST_FRAMEWORK={
"DEFAULT_AUTHENTICATION_CLASSES":["app01.app_auth.MyAuthentication",]
}
# 局部使用,在視圖類上寫
authentication_classes=[MyAuthentication]
# 局部禁用
authentication_classes=[]
認證的配置
# 可以有多個認證,從左到右依次執(zhí)行
# 全局使用,在setting.py中配置自己寫的認證類
REST_FRAMEWORK={
"DEFAULT_AUTHENTICATION_CLASSES":["app01.app_auth.MyAuthentication",]
}
# 局部使用,在視圖類上寫自己定義的認證類
authentication_classes=[MyAuthentication]
# 局部禁用
authentication_classes=[]
當前標題:認證
文章網(wǎng)址:http://chinadenli.net/article20/dsogcco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、全網(wǎng)營銷推廣、定制開發(fā)、小程序開發(fā)、微信公眾號、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)