Django框架中的分页和筛选操作
分页设置
请求链接为 http://127.0.0.1:8000/api/user/?page=2&size=2
class UserPagination(PageNumberPagination):
page_size = 6
page_query_param = 'page'
page_size_query_param = 'size'
请求链接为 http://127.0.0.1:8000/api/user/?limit=3&offset=6
class UserPagination(LimitOffsetPagination):
limit_query_param = 'limit'
offset_query_param = 'offset'
请求链接为 http://127.0.0.1:8000/api/user/?cursor=cD1saXN0
class UserPagination(CursorPagination):
cursor_query_param = 'cursor'
page_size = 6
page_size_query_param = 'size'
ordering = 'username'
筛选操作
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend
# 在视图类中添加下列代码
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filter_fields = ('username',)
search_fields = ('username',)
ordering_fields = ('username', 'id')
结果为
访问频率限流
from rest_framework.throttling import SimpleRateThrottle
class VisitThrottle(SimpleRateThrottle):
scope = 'visit'
def get_cache_key(self, request, view):
return self.get_ident(request)
class UserThrottle(SimpleRateThrottle):
scope = 'user'
def get_cache_key(self, request, view):
return request.user.username
在全局中设置
REST_FRAMEWORK = {
"DEFAULT_THROTTLE_CLASSES": ['api.throttle.VisitThrottle', 'api.throttle.UserThrottle'],
"DEFAULT_THROTTLE_RATES": {
"user": '3/m',