在编程的世界中,我们认为,用户输入的所有数据都是不可靠的,不合法的,直接使用用户输入的数据是不安全的,因此就需要认证组件、权限组件以及频率组件。
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 = { |