gla*_*con 3 django django-rest-framework json-api
我已经阅读了这个问题如何在 Django Rest Framework JSON API 中生成 JSON-API 数据属性与结果属性?但是接受的答案对我不起作用,而且我的情况未涵盖其中。
我正在使用 Django Rest Framework (3.5.3) 来提供 API 端点。该终点基于
class FruitTestReadOnlyViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Fruit.objects.all()
serializer_class = FruitSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
Run Code Online (Sandbox Code Playgroud)
从那里返回的数据很好,只是它具有“结果”属性而不是“数据”属性。
我上面提到的问题建议你这样做
class FruitTestReadOnlyViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Fruit.objects.all()
serializer_class = FruitSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
renderer_classes = (JSONRenderer,)
parser_classes = (JSONParser,)
Run Code Online (Sandbox Code Playgroud)
但这对我来说没有区别,事实上我已经有了全局设置,我相信它涵盖了渲染和解析器方面
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'PAGE_SIZE': 10,
'EXCEPTION_HANDLER': 'rest_framework_json_api.exceptions.exception_handler',
'DEFAULT_PAGINATION_CLASS':
'rest_framework_json_api.pagination.PageNumberPagination',
'DEFAULT_PARSER_CLASSES': (
'rest_framework_json_api.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser'
),
'DEFAULT_RENDERER_CLASSES': (
'djangorestframework_camel_case.render.CamelCaseJSONRenderer',
'rest_framework_json_api.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
),
'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',
}
Run Code Online (Sandbox Code Playgroud)
所以我很想知道最近是否有人这样做了,他们是如何做到的?
顺便说一句,我还有其他 API 端点,ModelViewSet它们可以正常工作并提供“数据”属性而不是“结果”……这是其中一个的示例
class TreeViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows Tree to be CRUDed.
"""
queryset = Tree.objects.all()
serializer_class = TreeSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
def get_queryset(self):
return Tree.objects.filter(username=self.request.user)
Run Code Online (Sandbox Code Playgroud)
分页.py
from collections import OrderedDict
from rest_framework.response import Response
class Pagination(PageNumberPagination):
def get_paginated_response(self, data):
return Response(OrderedDict([
('count', self.page.paginator.count),
('next', self.get_next_link()),
('previous', self.get_previous_link()),
('data', data)
]))
Run Code Online (Sandbox Code Playgroud)
设置.py
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS':
'path_to_pagination.pagination.Pagination',
}
Run Code Online (Sandbox Code Playgroud)
如果您只想将其应用于类FruitTestReadOnlyViewSet,请不要更改 settings.py 并为此类设置 pagination_class:
class FruitTestReadOnlyViewSet(viewsets.ReadOnlyModelViewSet):
pagination_class = Pagination
Run Code Online (Sandbox Code Playgroud)
将默认分页get_paginated_response方法从('results', data)to更改即可('data', data)。
| 归档时间: |
|
| 查看次数: |
742 次 |
| 最近记录: |