我有两个基于 drf 类的视图端点,一个用于登录,一个用于密码重置 我想使用限制来防止对这两个端点的暴力相关攻击 我发现了很多讨论实施和限制类别的问题,但没有人讨论什么是保护端点的良好速率限制 那么实际使用的数字是多少?每秒或每分钟或每小时,用户不应该通过的实际速率是多少,否则被认为是非法的 该应用程序是一个类似社交媒体的应用程序
TLDR:一段时间内允许的请求数量是多少,以确保社交媒体应用程序的登录 api 端点不会被暴力破解
在我的项目中,我经常使用 APIView 基于类的视图来处理特定 HTTP 方法(如 GET、POST、PUT 或 DELETE)的自定义逻辑或复杂操作。另一方面,对于模型上的简单 CRUD(创建、检索、更新、删除)操作,我更喜欢使用 ModelViewSet。
以下示例演示了如何使用 APIView 进行自定义逻辑以及使用 ModelViewSet 进行 CRUD 操作:
APIView
from rest_framework import generics, status
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import MyModel
from .serializers import MyModelSerializer
class MyCustomView(APIView):
"""
A custom API view for handling specific operations.
"""
def get(self, request):
# Custom logic for GET method
queryset = MyModel.objects.all()
serializer = MyModelSerializer(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
def post(self, request):
# Custom logic for POST method
serializer = MyModelSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
使用 ModelViewSet 的示例:
from rest_framework import viewsets
from .models import MyModel
from .serializers import MyModelSerializer
class MyModelViewSet(viewsets.ModelViewSet):
"""
A ModelViewSet for CRUD operations on MyModel.
"""
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
在此示例中,MyCustomView 扩展了 APIView 并定义了用于处理 GET 和 POST 请求的自定义逻辑。另一方面,MyModelViewSet 扩展了 ModelViewSet,它自动为 MyModel 模型提供 CRUD 操作(创建、检索、更新、删除)。