在DjangoRESTAPI中使用新行将json数据作为纯文本发布

我有一个 python 服务(web),我想在其中使用 Django REST API 输入带有新行的纯文本。例如,

输入:


1

3日2
月 6 月

我想在下面的 django API 内容表单中用新行输入这个约束。见下图,

在 APIView 中检索 post输入值后,我将通过一些计算得到输出。响应将作为 JSON 输出。例如,[ "01", "02", "03" ]

我的问题是当我尝试发布该输入(带有新行的文本)时。它给出如下错误,

我如何通过这个 python Django REST API 输入(带新行的纯文本),输出将作为一个有序的 json 数组的响应。

提前感谢您的指导

回答

如果您想将请求正文作为多行文本发送,您需要做一些事情。

  1. 创建一个纯文本解析器

这是必需的,因为默认情况下 DjangoRestFramework 将 JSONParser 作为其默认值,这就是您看到收到的错误消息的原因

如果您遵循此GuidLine,您将看到如何实施它。

import codecs

from django.conf import settings
from rest_framework.exceptions import ParseError
from rest_framework.parsers import BaseParser

class PlainTextParser(BaseParser):
    media_type = "text/plain"

    def parse(self, stream, media_type=None, parser_context=None):
        """
        Parses the incoming bytestream as Plain Text and returns the resulting data.
        """
        parser_context = parser_context or {}
        encoding = parser_context.get('encoding', settings.DEFAULT_CHARSET)

        try:
            decoded_stream = codecs.getreader(encoding)(stream)
            text_content = decoded_stream.read()
            return text_content
        except ValueError as exc:
            raise ParseError('Plain text parse error - %s' % str(exc))

  1. 将该解析器添加到 Django Rest Framework 配置中
REST_FRAMEWORK = {
    ...
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'path.to.PlainTextParser' # Replace path.to with you project path to that class
    ],
    ...
}

如果您希望它仅适用于特定的视图,则可以将其添加到其 parser_classes

  1. 当您在 DjangoRestFramwork Browsable API 中执行请求时,选择 text/plain 作为您的媒体类型,并在您的 http 客户端中输入 Content-Type: text/plain

应该是这样,希望有帮助。


以上是在DjangoRESTAPI中使用新行将json数据作为纯文本发布的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>