目录
1.限流
在settings.py
中配置
REST_FRAMEWORK = {
# 限流(防爬虫)
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle',
],
# 限流策略
'DEFAULT_THROTTLE_RATES': {
'user': '3/hour', # 每小时3次
'anon': '100/day', # 每天能访问100次
},
}
2.过滤
2.1在settings.py
中配置
REST_FRAMEWORK = {
# 限流(防爬虫)
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle',
],
# 限流策略
'DEFAULT_THROTTLE_RATES': {
'user': '1000/hour', # 每小时100次
'anon': '1000/day', # 每天能访问3次
},
# 过滤器后端
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend',
# 'django_filters.rest_framework.backends.DjangoFilterBackend', 包路径有变化
],
}
2.2在serializers.py
序列化
rom .models import *
from .views import *
from rest_framework import serializers
class ActorSerializers(serializers.ModelSerializer):
class Meta:
model = Actor
fields = '__all__'
depth = 1 #外键序列化
2.3views.py
from rest_framework.viewsets import ModelViewSet
from .models import *
from .serializers import *
from django_filters.rest_framework import DjangoFilterBackend
class ActorModelView(ModelViewSet):
queryset = Actor.objects.all()
serializer_class = ActorSerializers
# 过滤
filter_backends = (DjangoFilterBackend)
# 过滤的字段
filter_fields = ('name', 'phone')
- Postman测试
3.排序
3.1在settings.py
中配置
REST_FRAMEWORK = {
# 限流(防爬虫)
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle',
],
# 限流策略
'DEFAULT_THROTTLE_RATES': {
'user': '1000/hour', # 每小时100次
'anon': '1000/day', # 每天能访问3次
},
# 过滤器后端
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend',
# 'django_filters.rest_framework.backends.DjangoFilterBackend', 包路径有变化
],
# 5.1过滤排序(全局):Filtering 过滤排序
'SEARCH_PARAM': 'age',
'ORDERING_PARAM': 'ordering',
'NUM_PROXIES': None,
}
3.2在serializers.py
序列化
rom .models import *
from .views import *
from rest_framework import serializers
class ActorSerializers(serializers.ModelSerializer):
class Meta:
model = Actor
fields = '__all__'
depth = 1 #外键序列化
2.3views.py
from rest_framework.viewsets import ModelViewSet
from .models import *
from .serializers import *
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter
class ActorModelView(ModelViewSet):
queryset = Actor.objects.all()
serializer_class = ActorSerializers
# 支持过滤 与 排序
filter_backends = (DjangoFilterBackend, OrderingFilter)
# 过滤的字段
filter_fields = ('name', 'phone')
# 排序的字段
ordering_fields = ('id', 'age')
- Postman测试
4.分页
3.1在settings.py
中配置
REST_FRAMEWORK = {
# 限流(防爬虫)
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle',
],
# 限流策略
'DEFAULT_THROTTLE_RATES': {
'user': '1000/hour', # 每小时100次
'anon': '1000/day', # 每天能访问3次
},
# 过滤器后端
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend',
# 'django_filters.rest_framework.backends.DjangoFilterBackend', 包路径有变化
],
# 5.1过滤排序(全局):Filtering 过滤排序
'SEARCH_PARAM': 'age',
'ORDERING_PARAM': 'ordering',
'NUM_PROXIES': None,
}
3.2在serializers.py
序列化
rom .models import *
from .views import *
from rest_framework import serializers
class ActorSerializers(serializers.ModelSerializer):
class Meta:
model = Actor
fields = '__all__'
depth = 1 #外键序列化
2.3views.py
from rest_framework.viewsets import ModelViewSet
from .models import *
from .serializers import *
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter
from rest_framework.pagination import PageNumberPagination
# 局部自定义分页
class PageNum(PageNumberPagination):
# 代表每页返回数据数量的参数,默认值: None
page_size_query_param = 'page_size'
# 代表页码的参数,默认值: page
page_query_param = 'page'
# 一页中最多显示的条数
# max_page_size = 2
# 每页显示条数
page_size = 2
class ActorModelView(ModelViewSet):
queryset = Actor.objects.all()
serializer_class = ActorSerializers
# 分页
pagination_class = PageNum
# 过滤 与 排序
filter_backends = (DjangoFilterBackend, OrderingFilter)
# 过滤的字段
filter_fields = ('name', 'phone')
# 排序的字段
ordering_fields = ('id', 'age')
- Postman测试