欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

認證

認證的實現(xiàn)

使用步驟:

專注于為中小企業(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': '用戶名或密碼錯誤'})
  1. 在app中寫一個認證類 app_auth.py
# 在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)

外貿(mào)網(wǎng)站制作