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

     

  • 相关阅读:
    c++ 单步查看汇编代码【转】
    c++ 类内部函数调用虚函数
    grep和sed替换文件中的字符串【转】
    vim 正则替换【转】
    linux 文件编码问题
    shell截取字符串的一些简单方法
    chrome 安装页面编码选择插件
    namespace main
    【转】c++ 多线程
    使用git提交到github,每次都要输入用户名和密码的解决方法
  • 原文地址:https://www.cnblogs.com/wszxdzd/p/10428215.html
Copyright © 2020-2023  润新知