Mis*_*sza 6 django-rest-framework
我是 DRF 新手,对可浏览的 API 有疑问。我希望使用常规 APIView 在“原始数据”选项卡的“内容”中填充一个空的 JSON,以便用户看到请求应该是什么样子。
当我使用 CreateModelMixin 时它可以工作,但我想在创建后返回与整个模型不同的东西,甚至有只进行一些计算而没有任何模型的路由。
# serializers.py----------------------
class AnalysisSerializer(serializers.ModelSerializer):
requestor = serializers.ReadOnlyField(source='requestor.username')
results = serializers.ReadOnlyField()
class Meta:
model = Analysis
fields = ('requestor','text','results')
# views.py----------------------
class AnalysisRequest(APIView):
"""
Request text analysis.
"""
serializer_class = AnalysisSerializer
def post(self, request):
serializer = AnalysisSerializer(data=request.data)
if serializer.is_valid():
text = serializer.validated_data['text']
results = analyze.analyze_text(text)
serializer.save(requestor=request.user, results=results)
return Response(results, status=status.HTTP_200_OK)
else:
return Response({'error': 'Invalid JSON received.'}, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
对于上面的示例,我希望可浏览的 API 在“原始数据”选项卡的“内容”字段中显示空 JSON:
{
"text": ""
}
Run Code Online (Sandbox Code Playgroud)
有什么简单的方法可以做到这一点吗?
调试后我找到了一个适合我的解决方案(djangorestframework==3.14.0)。
尝试class BrowsableAPIRenderer调用view.get_serializer(),所以我只是将其添加到视图中。(更改以适应问题)
class AnalysisRequest(APIView):
serializer_class = AnalysisSerializer
def get_serializer():
return self.serializer_class()
Run Code Online (Sandbox Code Playgroud)
我还注意到 OPTIONS 也会做出反应并给出正在使用的序列化器的完整描述。
| 归档时间: |
|
| 查看次数: |
461 次 |
| 最近记录: |