关于drf的组件

关于版本控制组件:(赋值 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)方法

 

 

 

posted @ 2019-02-24 21:58  浮云遮月  阅读(314)  评论(0编辑  收藏  举报