可浏览的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构建序列化程序。
答案 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说,这不是很常见。
希望它有所帮助。