Mic*_*rts 5 django django-rest-framework
所以,我有以下几点:
class ObjectViewSet(
mixins.CreateModelMixin,
mixins.ListModelMixin,
mixins.RetrieveModelMixin,
mixins.DestroyModelMixin,
viewsets.GenericViewSet
):
"""
REST API endpoints for Objects.
"""
serializer_class = ObjectSerializer
queryset = Object.objects.all()
Run Code Online (Sandbox Code Playgroud)
例如,对于列表GET请求,这将返回:
[
{
"uuid": "787573a2-b4f1-40df-9e3a-8555fd873461",
},
{
"uuid": "2ab56449-1be1-47d7-aceb-a9eaefa49665",
}
]
Run Code Online (Sandbox Code Playgroud)
但是,我怎样才能稍微改变这种混合的响应,使其类似于以下内容:
{
success: true,
message: 'Some Extra Useful Message',
data: [
{
"uuid": "787573a2-b4f1-40df-9e3a-8555fd873461",
},
{
"uuid": "2ab56449-1be1-47d7-aceb-a9eaefa49665",
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是可能的,还是我应该编写自己的自定义端点Response()而不使用 DRF 的mixins功能?
所以,基本上,切换自定义:
Response(data, status=None, template_name=None, headers=None, content_type=None)
Run Code Online (Sandbox Code Playgroud)
到:
response = {
'success': true,
'message': 'Some Extra Useful Message',
'data': serializer.data
}
Response(response, status=None, template_name=None, headers=None, content_type=None)
Run Code Online (Sandbox Code Playgroud)
小智 7
经过长时间的研究,我发现这个很有用并且最适合使用。对于此类用例,必须参考此文档。对于您的情况,您可以执行以下操作 -
声明一个类renderer.py
from rest_framework.renderers import JSONRenderer
from rest_framework.utils import json
class JSONResponseRenderer(JSONRenderer):
# media_type = 'text/plain'
# media_type = 'application/json'
charset = 'utf-8'
def render(self, data, accepted_media_type=None, renderer_context=None):
response_dict = {
'status': 'failure',
'data': data,
'message': '',
}
data = response_dict
return json.dumps(data)
Run Code Online (Sandbox Code Playgroud)
更新您的设置.py
REST_FRAMEWORK = {
# Other code
'DEFAULT_RENDERER_CLASSES': (
'<app-name>.renderer.JSONResponseRenderer',
)
}
Run Code Online (Sandbox Code Playgroud)
更新您的 ViewSet 类
class YourViewSet(viewsets.ModelViewSet):
# Other code
renderer_classes = [JSONResponseRenderer]
Run Code Online (Sandbox Code Playgroud)
一切准备就绪!也可以多参考一下这个帖子。
| 归档时间: |
|
| 查看次数: |
859 次 |
| 最近记录: |