zoukankan      html  css  js  c++  java
  • 关于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)方法

     

  • 相关阅读:
    强化学习框架RLlib教程003:Training APIs的使用(二)基础pythonAPI
    强化学习框架RLlib教程002:Training APIs(一)快速入门与配置项
    强化学习框架RLlib教程001:Ray和RLlib介绍
    强化学习原理源码解读004:A3C (Asynchronous Advantage Actor-Critic)
    强化学习原理源码解读003:Actor-Critic和A2C
    强化学习原理源码解读002:DQN
    强化学习原理源码解读001:Policy Gradient
    部署服务包卡住不打日志排查问题
    [转]Angular Reactive Forms -- Model-Driven Forms响应式表单
    AWS DMS MySql数据同步Elasticsearch
  • 原文地址:https://www.cnblogs.com/wszxdzd/p/10428215.html
Copyright © 2011-2022 走看看