2020/10/28:ModelViewSet和axios的封装
基础知识点汇总:
ModelViewSet:
过滤Filtering
对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-filter扩展来增强支持
pip install django-filter
在配置文件settings.py中增加过滤后的设置:
INSTALLED_APPS = [
···
"django_filter", # 需要注册路由
]
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': (
'django_filters.rest_framework.DjangoFilterBackend',
)
}
在视图文件views.py中添加filter_fields属性,指定可以过滤的字段
from apps.app1.serializers import *
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
class UserView(ModelViewSet):
queryset = User.objects.all()
seriallizer_class = UserSerializers
filter_fields = ('username', 'age')
http://192.168.56.100:8888/a1/users/?username=帅刘
排序OrderingFilter:
对于列表数据,rest_framework提供了OrderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序。
使用方法:
在类视图中设置filter_backends,使用rest_framework.filters.OrderingFilter过滤器,rest_framework会在请求的查询字符串参数中检查是否包含了ordering参数,如果包含了ordering参数,则按照ordering参数指明的排序字段对数据集进行排序。
–前端可以传递的ordering参数的可选字段需要在ordering_fields中指明
class UserView(ModelViewSet):
queryset = User.objects.all()
seriallizer_class = UserSerializers
filter_fields = ('username', 'age')
ordering_fields = ('id', 'age')
http://192.168.56.100:8888/a1/users/?ordering=-age
分页PageNumberPagination:
前端访问形式:
GET: http://api.example.org/books/?page=4
可以在子类中定义属性:
- page_size:每页数目
- page_query_param:前端发送页面数关键字,默认为:“page”
- page_size_query_param:前端发送的每页数目关键字名,默认为“None”
- max_page_size:最多能设置的每页数量
from rest_framework.pagination import PageNumberPagination
class StandardPageNumberPagination(PageNumberPagination):
page_size_query_param = 'page_size'
max_page_size = 10
class BookListView(ListAPIView):
queryset = BookInfo.objects.all().order_by("id")
serializer_class = BookInfoSerializer
pagination_class = StandardPageNumberPagination
# 127.0.0.1/books/?page=2&page_size=2