![]() 系列文章目录
前言在本文中,我们将深入探讨Django REST framework中的三大核心组件:认证、权限与限流。首先,我们将揭示认证在保护API访问权限、验证用户身份方面的关键作用,并介绍如何在Django REST framework中配置和使用不同的认证方案。接着,我们将探讨权限控制,学习如何限制不同用户对API资源的访问,确保敏感数据的安全。最后,我们将讨论限流技术,了解如何通过限制请求频率来防止API被滥用,保障服务的稳定性和可用性。 一、认证Django 自带一个用户验证系统。它负责处理用户账号、组、权限和基于cookie的用户会话。 认证系统由以下部分组成:
Django 里的验证系统旨在通用化,不提供一些常见的 web 验证系统的特性。其中一些常见问题的解决方案已在第三方包中实现。
可以在配置文件中配置全局默认的认证方案,认证需要和权限一起使用 [code]#settings.py REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES':( #基本认证 'rest_framework.authentication.BasicAuthentication', # session认证 'rest_framework.authentication.SessionAuthentication', ), ) [/code]认证失败会有两种可能的返回值:
二、权限权限控制 可以限制用户对于视图的访问和对于具体数据对象的访问。 可以在配置文件中设置默认的权限管理类,如: [code]REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ) } [/code]如果未指明,则采用如下默认配置: [code]REST_FRAMEWORK = { 'DEFAULT PERMISSION CLASSES' : ( 'rest _framework.permissions.ALLowAny' ) } [/code]提供的权限:
三、限流限流与权限类似,因为它确定是否应该授权请求。 限流阀 指示了一种临时状态,并用于控制客户端可以对API进行的请求速率。 1. 匿名用户全局限流可以对接口访问的频次进行限制,以减轻服务器压力。特别是限制爬虫的抓取。 在配置文件中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES进行全局配置: [code] REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': ( # 限制所有匿名未认证用户,使用IP区分用户 'rest_framework.throttling.AnonRateThrottle', #认证用户的限流 'rest_framework.throttling.UserRateThrottle', ), 'DEFAULT_THROTTLE_RATES': { # 可以使用 second, minute, hour 或day来指明周期 'anon': '3/minute', 'user': '5/minute' } } [/code]2. 匿名用户局部限流视图中使用throttle_classes属性设置限流用户类型 [code] from rest_framework.generics import ListAPIView from serializer import UserSerializer, User from rest_framework.throttling import AnonRateThrottle class UserView(ListAPIView): queryset = User.objects.all() serializer_class = UserSerializer throttle_classes = [AnonRateThrottle] # 指明针对匿名用户进行限流,限流频率全局配置 [/code]在项目配置文件中针对用户类型设置具体频率: [code] REST_FRAMEWORK = { 'DEFAULT_THROTTLE_RATES': { # 可以使用 second, minute, hour 或day来指明周期 'anon': '3/minute', 'user': '5/minute' } } [/code]四、认证、权限、限流全局配置示例[code]# settings.py # 认证,权限,限流 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES':( #基本认证 'rest_framework.authentication.BasicAuthentication', # session认证 'rest_framework.authentication.SessionAuthentication', ), 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ), 'DEFAULT_THROTTLE_CLASSES': ( # 限制所有匿名未认证用户,使用IP区分用户 'rest_framework.throttling.AnonRateThrottle', #认证用户的限流 'rest_framework.throttling.UserRateThrottle', ), 'DEFAULT_THROTTLE_RATES': { # 可以使用 second, minute, hour 或day来指明周期 'anon': '3/minute', 'user': '5/minute' } } [/code]![]() 免责声明:本内容来源于网络,如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |