from rest_framework import serializers
from.models import *
class UserSer(serializers.ModelSerializer):
class Meta:
model=User
fields='__all__' # 序列化的时候显示哪些字段 __all__代表所有
depth=1 # 序列化外键关联的表 写1就是第一个表 2第二个表 3....
可以对接口访问的频次进行限制,以减轻服务器压力。
可以在配置文件中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES 进行全局配置
REST_FRAMEWORK={
'DEFAULT_THROTTLE_CLASSES':(
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
),
'DEFAULT_THROTTLE_RATES':{
'anon':'1000/day',
'user':'1000/day'
}
}
DEFAULT_THROTTLE_RATES 可以使用second、minute、hour、或 day 来指明周期。
from rest_framework.viewsets import ModelViewSet
class UserView(ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSer
#(子)路由配置
from django.urls import path,include
from app03 import views
from rest_framework.routers import DefaultRouter
router=DefaultRouter()
router.register('users',views.UserView)
urlpatterns = [
path('',include(router.urls))
]
对于列表数据,REST framework 提供了OrderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序
使用方法:
在类视图中设置filter_backends,使用rest_framework.filters.OrderingFilter 过滤器,REST framework会在请求的查询字符串参数中检查是否包含了ordering参数,则按照ordering参数指明的排序字段对数据集进行排序。
前端可以传递的ordering参数的可选字段值需要在ordering_fields中指明。
# 导包排序的包
from django_filters.rest_framework import DjangoFilterBackend
# 导包过滤的包
from rest_framework.filters import OrderingFilter
class UserView(ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSer
filter_backends = (OrderingFilter,DjangoFilterBackend) # 排序 过滤
ordering_fields = ('age',) # 根据年龄排序 指定排序字段
对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。
pip install django-filter
在配置文件中增加过滤后端的设置
INSTALLED_APPS = [
'django_filters' #需要注册应用
]
REST_FRAMEWORK={
'DEFAULT_FILTER_BACKENDS':('django_filters.rest_framework.DjangoFilterBackend',)
}
# 导包过滤的包
from rest_framework.filters import OrderingFilter
class UserView(ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSer
filter_fields = ('username', 'age') # 添加filter_fields属性 指定过滤的字段
分页PageNumberPagination
可以在子类中定义的属性
page_size每页数目
page_query_param前端发送的页数关键字名,默认’page’
page_size_query_param前端发送的每页数目关键字名,默认为None
max_page_size 前端最多能设置的每页数量
from rest_framework.pagination import PageNumberPagination
# 局部自定义分页
class PagenumV(PageNumberPagination):
# 代表每页返回数据数量的参数,默认值:none
page_size_query_param = 'page_size'
# 一页最多显示的条数
max_page_size = 3
class UserView(ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSer
pagination_class = PagenumV #分页