• DRF之认证组件、权限组件、频率组件使用方法总结


    认证组件格式:

    from rest_framework.authentication import BaseAuthentication
    from rest_framework.exceptions import APIException
    
    from .models import UserToken
    
    
    # 1、定义认证类
    class UserAuth(BaseAuthentication):
    
        # 所有的认证逻辑都在authenticate
        def authenticate(self, request):
            user_token = request.query_params.get("token")
            # print('request.query_params:',request.query_params)
            # print('request.GET',request.GET)
            #request.query_params和request.GET打印的结果一样
            try:
                token = UserToken.objects.get(token=user_token)
                # 后面权限会用到
                return token.user, token.token
            except Exception:
                raise APIException("没有认证")
    2 、局部使用
    authentication_classes=[UserAuth,MyAuth2]
    #注意:当有多个认证类时,返回值必须写在最后一个认证类中
    3 、全局使用
    查找顺序:自定义的APIView里找---》项目settings里找---》内置默认的
    REST_FRAMEWORK={
                'DEFAULT_AUTHENTICATION_CLASSES':['utils.common.UserAuth',]
    
            }

     权限组件格式:

    #1 写一个类
            class MyPermission():
                def has_permission(self,request,view):
                    token=request.query_params.get('token')
                    ret=models.UserToken.objects.filter(token=token).first()
                    if ret.user.type==2:
                    # 超级用户可以访问
                        return True
                    else:
                        return False
    #2 局部使用:
            permission_classes=[MyPermission,]
    #3 全局使用:
                REST_FRAMEWORK={
                'DEFAULT_PERMISSION_CLASSES':['utils.common.MyPermission',]
            }

     频率组件格式:

        1 写一个类:
            from rest_framework.throttling import SimpleRateThrottle
            class VisitThrottle(SimpleRateThrottle):
                scope = 'xxx'    #全局用scope,局部的可以用rate='5/s',如果用rate就不需要在settings里面配置
                def get_cache_key(self, request, view):
                    return self.get_ident(request)
        2 在setting里配置:
                'DEFAULT_THROTTLE_RATES':{
                    'xxx':'5/h',
                }
        3 局部使用
            throttle_classes=[VisitThrottle,]
        4 全局使用
            REST_FRAMEWORK={
                'DEFAULT_THROTTLE_CLASSES':['utils.common.MyPermission',]
            }
  • 相关阅读:
    [SCM]源码管理 perforce的权限管理
    [BuildRelease]产品和文件版本号
    删除所有的.svn 文件
    [SCM]源码管理 perforce快速入门
    6个Linux chkconfig命令实例 增加,删除,查看和修改services的自动启动选项
    [SCM]源码管理 perforce管理员需要知道的命令
    [SCM]源码管理 perforce与分布式团队的开发
    [SCM]源码管理 perforce命令行高级
    PHP aes加密 mcrypt转openssl问题;
    《Excel与VBA程序设计》第四章更新
  • 原文地址:https://www.cnblogs.com/fengchong/p/10100536.html
Copyright © 2020-2023  润新知