在DjangoRESTAPI中使用新行将json数据作为纯文本发布
我有一个 python 服务(web),我想在其中使用 Django REST API 输入带有新行的纯文本。例如,
输入:
1
月
3日2
月 6 月
我想在下面的 django API 内容表单中用新行输入这个约束。见下图,
在 APIView 中检索 post输入值后,我将通过一些计算得到输出。响应将作为 JSON 输出。例如,[ "01", "02", "03" ]
我的问题是当我尝试发布该输入(带有新行的文本)时。它给出如下错误,
我如何通过这个 python Django REST API 输入(带新行的纯文本),输出将作为一个有序的 json 数组的响应。
提前感谢您的指导
回答
如果您想将请求正文作为多行文本发送,您需要做一些事情。
- 创建一个纯文本解析器
这是必需的,因为默认情况下 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))
- 将该解析器添加到 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
- 当您在 DjangoRestFramwork Browsable API 中执行请求时,选择 text/plain 作为您的媒体类型,并在您的 http 客户端中输入
Content-Type: text/plain
应该是这样,希望有帮助。