首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django节流在生产模式下不起作用

Django节流在生产模式下不起作用
EN

Stack Overflow用户
提问于 2019-10-15 16:03:41
回答 1查看 929关注 0票数 3

我使用DJANGO REST框架来保护我的API。Django节流,限制匿名API上的请求数量并对用户进行身份验证。

节流在生产模式下不起作用。顺便说一下,我使用Ubuntu和Nginx服务器来部署我的站点。

我使用了两种方法,但这两种方法对我都不起作用。以下是代码。请帮帮我。我是姜戈的菜鸟。

我使用的第一种方法如下所述。Views.py

代码语言:javascript
运行
AI代码解释
复制
class SustainedAnon(AnonRateThrottle):
    rate = '100/day'

class BurstAnon(AnonRateThrottle):
    rate = '10/minute'

class SustainedUser(UserRateThrottle):
    rate = '100/day'


class BurstUser(UserRateThrottle):
    rate = '10/min'


class ProductApi(generics.RetrieveAPIView, mixins.CreateModelMixin):


    lookup_field= 'puid'

    serializer_class = ProductApisSerializers

    """
    Provides a get method handler.
    """
    # permission_classes = (IsAuthenticated,)

        throttle_classes = (SustainedAnon,SustainedUser,BurstAnon,BurstUser)



    def get_queryset(self):
        return ProductApis.objects.all()

    def post(self, request,*args,**kwargs):
        return self.create(request, *args, **kwargs)

URLS.PY

代码语言:javascript
运行
AI代码解释
复制
from django.contrib import admin
from django.urls import path, include
from . import views
from rest_framework.urlpatterns import format_suffix_patterns

urlpatterns = [
    path('',views.index, name='index'),
    path('api/<slug:puid>/',views.ProductApi.as_view()),
]

第二种方法- DRF

Views.py

代码语言:javascript
运行
AI代码解释
复制
class ProductApi(generics.RetrieveAPIView, mixins.CreateModelMixin):


    lookup_field= 'puid'

    serializer_class = ProductApisSerializers

    """
    Provides a get method handler.
    """
    # permission_classes = (IsAuthenticated,)

    throttle_classes = [UserRateThrottle,AnonRateThrottle]


    def get_queryset(self):
        return ProductApis.objects.all()

    def post(self, request,*args,**kwargs):
        return self.create(request, *args, **kwargs)

settings.py

代码语言:javascript
运行
AI代码解释
复制
REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ],
    'DEFAULT_THROTTLE_RATES': {
        'anon': '20/minute',
        'user': '10/minute',
    }
}

此外,在第一种方法中,我没有在settings.py文件中做任何更改,而在第二种方法中,我添加了额外的DRF代码来控制节流。

这两种方法对我都不起作用。

EN

回答 1

Stack Overflow用户

发布于 2019-10-15 20:52:18

在生产中使用LocMemCache会导致随机结果。您可能正在使用多个进程,这意味着每个进程都有各自独立的缓存。任何缓存在一个进程中的东西都不能被其他进程使用。

使用单个进程,就像对runserver所做的那样,使缓存保持一致。

TL;DR,不要在生产中使用LocMemCache。请使用Redis、Memcache或其他共享缓存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58398685

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文