关于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)方法