在编程的世界中,我们认为,用户输入的所有数据都是不可靠的,不合法的,直接使用用户输入的数据是不安全的,因此就需要认证组件、权限组件以及频率组件。
DRF用户认证
局部认证
定义一个认证类
1 | class UserAuth(BaseAuthentication): |
如果不希望每次都写那个无用的authenticate_header方法,我们可以这样:
导入模块,然后继承BaseAuthentication类
1 | from rest_framework.authentication import BaseAuthentication |
实现方式非常简单,到token表里面查看token是否存在,然后根据这个信息,返回对应信息即可,然后,在需要认证通过才能访问的数据接口里面注册认证类即可:
在需要认证的数据接口里面指定认证类
1 | class EgView(ModelViewSet): |
可以指定多个认证类,需要注意的是,如果需要返回数据,请在最后一个认证类中返回
全局认证
如果希望所有的数据接口都需要认证怎么办?就是这句代码:
1 | authentication_classes=api_settings.DEFAULT_AUTHENTICATION_CLASSES |
如果认证类自己没有authentication_classes,就会到settings中去找,通过这个机制,我们可以将认证类写入到settings文件中即可实现全局认证:
1 | REST_FRAMEWORK = { |
DRF权限认证
定义一个权限类
1 | class UserPerm(): |
指定权限验证类
1 | class EgView(ModelViewSet): |
DRF频率组件
使用DRF的简单频率控制来控制用户访问频率(局部)
定义一个频率类
导入模块
1 | from rest_framework.throttling import SimpleRateThrottle |
定义并继承SimpleRateThrottle
1 | class RateThrottle(SimpleRateThrottle): |
指定频率类
1 | class EgView(ModelViewSet): |
1 | class MyException(exceptions.Throttled): |
使用DRF的简单频率控制来控制用户访问频率(全局)
创建全局频率类并继承SimpleRateThrottle
1 | class RateThrottle(SimpleRateThrottle): |
在settings里面指定频率类和访问频率
1 | REST_FRAMEWORK = { |