Django REST Framework视图中使用的“format”参数是什么?

时间:2016-05-24 14:42:59

标签: python django django-rest-framework

在DRF文档示例found here中:

FROM mhart/alpine-node:6.2.0

上述示例在class SnippetList(APIView): """ List all snippets, or create a new snippet. """ def get(self, request, format=None): snippets = Snippet.objects.all() serializer = SnippetSerializer(snippets, many=True) return Response(serializer.data) def post(self, request, format=None): serializer = SnippetSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) format方法中都有一个未使用的get()参数。我已逐步完成了post()来源,但我找不到调度程序将此参数传递给rest_frameworkget()方法的任何实例。该参数是否需要出现在方法定义中?如果是这样,它用于什么?什么时候使用?

3 个答案:

答案 0 :(得分:8)

我发现使用format suffixes时会使用format参数。所以现在我想找出如何使用它,因为处理程序代码中的任何内容似乎都没有使用它,但它仍然有效(魔术行为)。

我继续使用pdb跟踪视图的执行情况,发现APIView.initial()kwargs中提取此参数,并在调用APIView.perform_content_negotiation()时使用它选择要在响应中使用的渲染器和媒体类型。

答案 1 :(得分:4)

Basiclly这个“format”参数用于定义输出响应format,如:csv,json等

答案 2 :(得分:0)

考虑示例: 假设您希望收到您的api端点的响应的“ html”格式 因此,您可以轻松地从网址本身进行查询,例如 https://api.example.com/users/?format=html 现在,如果您的视图没有使用format = None的参数,则可以使用。

但是要禁用此行为,必须将format = None