在coreapi / django rest框架中定义POST

时间:2018-03-09 14:13:56

标签: python django django-rest-framework core-api

有没有办法在django rest框架的模式中为post函数定义对象?

我有一个休息api视图:

next((k for k, v in DC.items() if v['ordertxid'] == MATCH), None)

应张贴的数据格式为:

class DocumentView(viewsets.ModelViewSet):
    ...
    queryset = Document.objects.all().order_by('pk')
    serializer_class = serializers.DocumentSerializer
    pagination_class = LargeResultPagination
    permission_classes = (IsAuthenticated,)
    authentication_class = (
        Token,
    )

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)  

如何使用coreapi在架构中描述?

{
     "items": ["a", "b", "c"],
     "name": "test" 
}

所以至少它将在描述中。这当然不是很方便,尤其是在需要发布的JSON中你需要更多的字段,因为描述只是单行的招摇。

最理想的情况是,如果我可以将'items'和'name'字段作为swagger页面中的单独字段。

我用谷歌搜索了,但我找不到答案。我看到的例子是获取参数。那么这里的最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

如果将其包装到AutoSchema中应该可以工作

schema = AutoSchema(manual_fields=[
    coreapi.Field(
        "data",
        required=True,
        location="body",
        description='{"items":[], "name":str}',
        schema=coreschema.Object()
    ),
])

答案 1 :(得分:0)

这个问题已经有很长的时间了,但是如果有人需要,这是您的解决方案,您需要将位置设置为“ form”,因此您的架构将像这样:

manual_fields=[
    coreapi.Field(
        "data",
        required=True,
        location="form",
        description='{"items":[], "name":str}',
        schema=coreschema.Object()
    ),
])

有关更多说明,请参见Schemas - Django Rest Framework

在这里我提取您需要的部分:

位置

确定信息如何编码到请求中。应该 以下字符串之一:

“路径”

包含在模板化URI中。例如url值为 / products / {product_code} /可以与“路径”字段一起使用, 来处理URL路径(例如/ products / slim-fit-jeans /)中的API输入。

这些字段通常会与 项目网址配置文件。

“查询”

包含为URL查询参数。例如,?search = sale。通常 用于GET请求。

这些字段通常与分页和过滤相对应 视图上的控件。

“表格”

包含在请求正文中,作为JSON对象的单个项或 HTML表单。例如{“ colour”:“ blue”,...}。通常对于POST, PUT和PATCH请求。多个“表单”字段可以包含在 单链接。

这些字段通常将与 视图。

“身体”

包含在完整的请求正文中。通常用于POST,PUT和 PATCH请求。链接上最多只能有一个“ body”字段。可能 不能与“表单”字段一起使用。

这些字段通常与使用 ListSerializer验证请求输入,或通过文件上传 视图。