django生成接口文档、drf的访问限流

在线自动生成接口文档 地址:swagger.io

drf-yasg

https://blog.csdn.net/qq_41141246/article/details/121370246

django第三方库 django-rest-swagger

#pip install django-rest-swagger



#settings.py中添加应用
INSTALL_APPS = [
	...,
	'rest_framework_swagger',
	]


REST_FRAMEWORK = {
 	'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
 }




#在urls.py中
from rest_framework_swagger.views import get_swagger_view

schema_view = get_swagger_view(title='项目接口文档')#此时就是三方库封装好的视图函数
urlpatterns = [
	path(...),
	path('api/docs/',schema_view),  #吧这个视图函数添加进来
	]

启动项目,访问这个url就可以看到接口文档

==============================================================

drf的限流访问(拿之前的租房项目为例)

#使用限流的话,需要配置redis数据库


#sittings.py中(配置drf)
REST_FRAMEWORK = {
     # 配置默认页面大小
     'PAGE_SIZE': 5,

     #配置默认限流类
     'DEFAULT_THROTTLE_CLASSES': (
         'rest_framework.throttling.AnonRateThrottle',
         #'rest_framework.throttling.UserRateThrottle'       #暂时注释掉(用户登陆成功后的限流)
     ),
    'DEFAULT_THROTTLE_RATES':{
        'anon':'5/min',														
       # 'user':'10000/day'									#暂时注释掉(用户登陆成功后,每天限制访问次数1万次)
    }

#现在如果去访问接口1分钟只能访问3次接口,当然这个配置可能不合理,根据项目实际需求看情况而定

如何自定义频率类
频率校验的规则
自定义频率类是最常见的:短信验证码接口一分钟只能发送一条短信

自定义频率类

自定义类继承SimpleRateThrottle
设置类实现scope,值就是一个字符串,与settings中的DEFAULT_THROTTLE_RATES进行对应 DEFAULT_THROTTLE_RATES就是设置scope绑定的类的频率规则:1/min 就代表一分钟只能访问一次
重写 get_cache_key(self, request, view) 方法,指定限制条件 不满足限制条件,返回None:代表对这类请求不进行频率限制 满足限制条件,返回一个字符串(是动态的):代表对这类请求进行频率限制 短信频率限制类,返回 “throttling_%(mobile)s” % {“mobile”: 实际请求来的电话}

系统频率类

  1. UserRateThrottle:限制所有用户访问频率
  2. AnonRateThrottle:只限制匿名用户访问频率

案例

throttles.py

from rest_framework.throttling import SimpleRateThrottle
# 只限制查接口的频率,不限制增删改的频率
class MethodRateThrottle(SimpleRateThrottle):
    scope = 'method'
    def get_cache_key(self, request, view):
        # 只有对get请求进行频率限制
        if request.method.lower() not in ('get', 'head', 'option'):
            return None

        # 区别不同的访问用户,直接的限制是不冲突的
        if request.user.is_authenticated:
            ident = request.user.pk
        else:
            # get_ident是BaseThrottle提供的方法,会根据请求头,区别匿名用户,
            # 保证不同客户端的请求都是代表一个独立的匿名用户
            ident = self.get_ident(request)
        return self.cache_format % {'scope': self.scope, 'ident': ident}

settings.py

REST_FRAMEWORK = {
    #  ...
    # 频率规则配置
    'DEFAULT_THROTTLE_RATES': {
        # 只能设置 s,m,h,d,且只需要第一个字母匹配就ok,m = min = maaa 就代表分钟
        'user': '3/min',  # 配合drf提供的 UserRateThrottle 使用,限制所有用户访问频率
        'anon': '3/min',  # 配合drf提供的 AnonRateThrottle 使用,只限制匿名用户访问频率
        'method': '3/min',
    },
}

views.py

from .permissions import IsVipUser
from .throttles import MethodRateThrottle
class CarViewSet(ModelViewSet):
    permission_classes = [IsVipUser]
    throttle_classes = [MethodRateThrottle]

    queryset = models.Car.objects.all()
    serializer_class = serializers.CarSerializer
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像风一样的男人@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值