關於版本控制項:(賦值 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...