zoukankan      html  css  js  c++  java
  • 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',]
            }
  • 相关阅读:
    C++栈(stack)、队列(queue)、链表(list)的常用函数
    C++中cin>>a原理
    C++中vector和堆的常用使用方法&例题:数据流中的中位数
    使用centos8搭建僵尸毁灭工程(PZ)服务器
    【从C#走进Python】四、装饰器
    【从C#走进Python】三、变量声明
    【从C#走进Python】二、迭代器
    【从C#走进Python】一、上下文管理器
    【C#基础】拥抱Lambda(2):表达式树与LINQ
    【机器学习笔记】Python机器学习基本语法
  • 原文地址:https://www.cnblogs.com/fengchong/p/10100536.html
Copyright © 2011-2022 走看看