DRF的十大元件之認證 許可權 節流

2021-09-25 20:58:18 字數 2892 閱讀 4388

1.認證

定義乙個使用者表和乙個儲存使用者的token表

# django的settings檔案

2.許可權

只有vip使用者才能看的內容:

自定義許可權類:

from rest_framework.permissions import basepermission

class mypermission(basepermission):

message = "sorry,您沒有許可權"

def has_permission(self, request, view):

# 內建封裝的方法

'''判斷該使用者有沒有許可權

'''# 判斷使用者是不是vip使用者

# 如果是vip使用者就返回true

# 如果是普通使用者就返會flase

if request.method in ["post","put","delete"]:

# print(111)

print(request.user.username)

print(request.user.type)

print(type(request.user.type))

if request.user.type == 2: # 是vip使用者

print(2222)

return true

else:

return false

else:

return true

def has_object_permission(self, request, view, obj):

# 用來判斷針對的obj許可權:

''''''

if request.method in ["put","delete"]:

print(obj.user.username)

print(request.user.username)

if obj.user == request.user:

return true

else:

return false

else:

return true

檢視級別配置:

class commentviewset(modelviewset):

queryset = models.comment.objects.all()

authentication_classes = [myauth,]

permission_classes = [mypermission,]

全域性級別配置:

複製**

# rest framework 相關的配置

rest_framework =

}

3.節流

節流(throttling)類似於許可權,因為它決定了是否應該對請求進行授權。節流表示乙個臨時狀態,並用於控制客戶端對api的請求率。

我們可以先編寫乙個類

class visitthrottle(object):

def allow_request(self, request, view):

return true # false表示訪問頻率太高被限制

內建控制頻率的類

from rest_framework.throttling import basethrottle

class visitthrottle(basethrottle):

def __init__(self):

self.history = none

def allow_request(self, request, view):

# 1. 獲取使用者ip

remote_addr = request._request.meta.get("remote_addr")

# print(remote_addr)

# 2. 新增到訪問記錄中

ctime = time.time()

# 當visit_record中沒有這個記錄,可以直接訪問,新增乙個記錄

if remote_addr not in visit_record:

visit_record[remote_addr] = [ctime, ]

return true

history = visit_record.get(remote_addr)

self.history = history

# 拿到最後歷史記錄裡面的最後乙個時間,如果最後乙個時間小於當前時間-60

while history and history[-1] < ctime - 60:

history.pop()

if len(history) < 3:

history.insert(0, ctime)

return true

return false # false表示訪問頻率太高被限制

def wait(self):

"""還需要等多少秒可以訪問

:return:

"""ctime = time.time()

return 60 - (ctime - self.history[-1])

DRF十大元件

4.版本 版本控制 模型類設計 from django.db import models create your models here.class usergroup models.model title models.charfield max length 32,verbose name 使用...

DRF十大元件使用

23 request.request.post.get json資料格式 data json.loads request.body.decode utf 8 name data.get name age data.get age print name,age 使用drf解析器 from rest f...

drf 三大認證之 認證元件

原始碼分析 1 apiview的dispath self,request,args,kwargs 2 dispath方法內 self.initial request,args,kwargs 進入三大認證 認證元件 校驗使用者 遊客 合法使用者 非法使用者 非法使用者 代表校驗失敗,丟擲異常,返回40...