您的位置:首页 > 编程语言 > Go语言

Django Rest framework视图-----限流和过滤

2019-06-02 13:26 615 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_38181278/article/details/90738443

限流Throttling

可以对接口访问的频次进行限制,以减轻服务器压力。

使用

可以在配置文件中,使用

DEFAULT_THROTTLE_CLASSES
 和 
DEFAULT_THROTTLE_RATES
进行全局配置,

[code]REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.AnonRateThrottle',  # 匿名用户
'rest_framework.throttling.UserRateThrottle'  # 认证用户
),
'DEFAULT_THROTTLE_RATES': {
'anon': '100/day',  # 匿名用户每天100次访问
'user': '1000/day'  # 认证用户每天1000次访问
}
}

DEFAULT_THROTTLE_RATES
 可以使用 
second
minute
hour
 或
day
来指明周期。

也可以在具体视图中通过throttle_classess属性来配置,如

[code]from rest_framework.throttling import UserRateThrottle
from rest_framework.views import APIView

class ExampleView(APIView):
throttle_classes = (UserRateThrottle,)
...

可选限流类

1) AnonRateThrottle

限制所有匿名未认证用户,使用IP区分用户。

使用

DEFAULT_THROTTLE_RATES['anon']
 来设置频次

2)UserRateThrottle

限制认证用户,使用User id 来区分。

使用

DEFAULT_THROTTLE_RATES['user']
 来设置频次

3)ScopedRateThrottle

限制用户对于每个视图的访问频次,使用ip或user id。

[code]REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.ScopedRateThrottle',
),
'DEFAULT_THROTTLE_RATES': {
'contacts': '1000/day',
'uploads': '20/day'
}
}
[code]class ContactDetailView(APIView):
throttle_scope = 'contacts'
...

class UploadView(APIView):
throttle_scope = 'uploads'
...

过滤Filtering

对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。

[code]pip install django-filter

在配置文件中增加过滤后端的设置:

[code]INSTALLED_APPS = [
...
'django_filters',  # 需要注册应用,
]

REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}

在视图中添加filter_fields属性,指定可以过滤的字段

[code]class BookListView(ListAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
filter_fields = ('btitle', 'bread')

# 127.0.0.1:8000/books/?bread=20

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: