【问题标题】:How to POST a data value using @api_view in django rest api?如何在 django rest api 中使用 @api_view 发布数据值?
【发布时间】:2018-08-14 06:29:57
【问题描述】:

我有两个 API。从一个 API,我将字符串数据发送到第二个 API。在第二个 API 进行一些计算时,我将 JSON 格式的数据保存在 API 中,并将数据发送回第一个 API。这是工作。但在第二个 API 中,如果我尝试从内容框中发布字符串数据,则会显示错误。这里的媒体类型是“application/json”。那么如何从 API 视图发布数据呢?我添加了第二个 API 的截图:

input data

Error Message

第二个API的views.py的一部分:

@api_view(['GET', 'POST'])
def sentenceList(request):
    if request.method == 'GET':
        queryset = Bucketlist.objects.all()
        serializer = BucketlistSerializer(queryset, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        triples = getTriples(request.data)
        keys = ['sub','predi','obj']
        demo_data = dict(zip(keys,triples[0]))
        serializer = BucketlistSerializer(data=demo_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)

【问题讨论】:

  • 我不确定您的要求是什么,但是,错误图片显示 您没有提供 proper-JSON 数据
  • 如果我提供 JSON 数据,它会给出相同的错误消息。但是我想给个句子,像第一张图片一样建一个JSON数据保存在数据库中。

标签: django python-3.x api django-rest-framework


【解决方案1】:

我认为您应该为纯文本编写一个自定义解析器并在您的视图中使用它:

from rest_framework.parsers import BaseParser, JsonParser
from rest_framework.decorators import parser_classes

class PlainTextParser(BaseParser):
    """
    Plain text parser.
    """
    media_type = 'text/plain'

    def parse(self, stream, media_type=None, parser_context=None):
        """
        Simply return a string representing the body of the request.
        """
        return stream.read()

和你的看法:

@api_view(['GET', 'POST'])
@parser_classes((PlainTextParser, JsonParser))
def sentenceList(request):
...

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 2015-10-08
    • 2016-03-24
    • 2021-04-09
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多