From eecb4c9ec4830705d8d08a05f3827893a83a67b3 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Fri, 5 Sep 2025 19:13:33 +0300 Subject: [PATCH] Features: 1) Enhance rate-limiting decorators with `method_decorator` for better compatibility. Fixes: 1) Ensure consistent application of `ratelimit` across methods. Extra: 1) Minor readability improvement in views using `method_decorator`. --- core/views.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/views.py b/core/views.py index b6a82b6d..18a9c7af 100644 --- a/core/views.py +++ b/core/views.py @@ -10,6 +10,7 @@ from django.core.cache import cache from django.core.exceptions import BadRequest from django.http import FileResponse, Http404, JsonResponse from django.shortcuts import redirect +from django.utils.decorators import method_decorator from django.utils.http import urlsafe_base64_decode from django.utils.translation import gettext_lazy as _ from django.views.decorators.cache import cache_page @@ -315,7 +316,7 @@ class ContactUsView(APIView): YAMLRenderer, ] - @ratelimit(key="ip", rate="2/h") + @method_decorator(ratelimit(key="ip", rate="2/h", method="POST", block=True)) def post(self, request, *args, **kwargs): serializer = self.serializer_class(data=request.data) serializer.is_valid(raise_exception=True) @@ -351,7 +352,7 @@ class RequestCursedURLView(APIView): YAMLRenderer, ] - @ratelimit(key="ip", rate="10/h") + @method_decorator(ratelimit(key="ip", rate="10/h")) def post(self, request, *args, **kwargs): url = request.data.get("url") if not is_url_safe(url): @@ -427,7 +428,7 @@ class BuyAsBusinessView(APIView): Handles the "POST" request to process a business purchase. """ - @ratelimit(key="ip", rate="2/h", block=True) + @method_decorator(ratelimit(key="ip", rate="2/h", block=True)) def post(self, request, *_args, **kwargs): serializer = BuyAsBusinessOrderSerializer(data=request.data) serializer.is_valid(raise_exception=True)