關於drf的元件

2022-02-25 16:38:15 字數 2260 閱讀 9609

關於版本控制項:(賦值 reques.version  request.versioning_scheme)

from rest_framework.versioning import acceptheaderversioning 檢視原始碼

重點:重寫 determine_version(request, *args, **kwargs) 方法

繼承object

我們通過原始碼:

if self.versioning_class is none:

return (none, none)

# 此時的versioning_class()是被在settings中配置的版本的例項化,所以只有乙個返回值即myversionde的例項化物件

scheme = self.versioning_class()

# 此時的determine_version為自己重寫類的方法

return (scheme.determine_version(request, *args, **kwargs), scheme)

通過 from rest_framework import versioning 檢視原始碼可以知道,我們自定義版本控制項的核心,就是重寫determine_version(request, *args, **kwargs)這個方法

下面,我們就重寫乙個版本控制類,建立乙個utils資料夾,建立乙個version.py,在version.py寫乙個版本控制類

class versioncontrol(object):

def determine_version(self, request, *args, **kwargs):

version = request.query_params.get('version')

if not version:

version = 'v1'

return version

在setting.py中設定全域性版本控制:

rest_framework= {

'default_versioning_class':'utils.version.versioncontrol'

接下來在檢視函式中就可以列印當前版本控制

class vertsion(apiview):

def get(self,request):

print(request.version)

return response('ok')

request.version是當前版本,request.versioning_scheme是控制類的例項化物件

關於認證元件:(賦值request.user,request.auth)

from rest_framework.authentication import baseauthentication 檢視原始碼

重點: 繼承baseauthentication類,

重寫authenticate(self, request) 方法

class authcheck(baseauthentication):

def authenticate(self, request):

token = request.query_params.get('token')

if not token:

raise ('無token')

user_obj = user.objects.filter(token=token).first()

if not user_obj:

raise ('token不合法')

return (user_obj,token)

許可權元件:(只做請求攔截)

重點:繼承object,

重寫has_permission(self, request, view)方法

class checkpermission(object):

message='許可權不足'

def has_permission(self,request,view):

user_obj =request.user

if user_obj.type == '1':

return true

else:

return false

頻率元件:(只做請求攔截)

重點: 繼承object

重寫allow_request(self,request,view) 和wait(self)方法

DRF過濾元件

from rest framework import pagination 基礎分頁 class pagenumberpagination pagination.pagenumberpagination 預設一頁顯示的條數 page size 2 查詢頁面的關鍵字 page query param ...

drf過濾元件

主要包含分頁,搜尋,排序,分類,區間 系統基礎分頁器from rest framework import pagination class freecourselistviewset listmodelmixin,genericviewset queryset models.course.objec...

drf 分頁元件

目錄可以達到檢視第幾頁以及每一頁顯示幾條的效果 from rest framework.pagination import pagenumberpagination 一 基本使用 url url 無效 class pager apiview def get self,request,args,kwa...