如何检索POST的“原始数据”空json?

时间:2014-04-03 09:40:34

标签: django-rest-framework

可浏览的django-reset-framework提供了一个方便的原始数据"包含empty-json的选项卡,可以轻松创建新对象。

我有许多不同的Serializer,它们根据请求类型(GET / POST)和其他逻辑进行更改,所以我想测试这个empty-json作为我的单元测试的一部分。

我的问题是:如何根据APIClient请求(drf的测试客户端)以编程方式检索序列化程序?

我在https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/renderers.py#L454看到了代码,具体来说,

view.get_serializer(instance=obj)

但我仍无法从APIClient构建序列化程序。

2 个答案:

答案 0 :(得分:4)

基于blck的建议,我使用OPTIONS来接收json模式。 不幸的是,DRF OPTION方法存在一个问题:它创建了一个克隆请求来模拟PUT / POST方法,但没有将克隆请求传播给View。 这导致视图根据http方法更改序列化程序以返回不正确的序列化程序。

例如,我的视图使用一个序列化程序用于GET,另一个用于POST / PUT:

def get_serializer_class(self):
    return WriteSerializer if request.method in ['POST', 'PUT'] else ReadSerializer

我在这里提出了一个拉取请求:http://github.com/tomchristie/django-rest-framework/pull/1507

答案 1 :(得分:3)

为什么要使用客户端检索序列化程序?通常客户端必须知道如何发出每个请求(在API文档中进行了解释)。您必须发送请求并手动编写json格式。

可浏览的API知道如何表示数据,因为它在服务器部分中运行。

无论如何,您可以尝试的一件事是请求OPTIONS:curl -X OPTIONS url/object -u user:pass并解析输出(您在响应中有字段定义,告诉您哪个var类型是每个属性等等。但是,正如我和# 39; ve说,这不是很常见。

希望它有所帮助。