Flask将\n添加到REST POST请求返回的字符串末尾的字符串中

2024-05-02 05:58:46 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,这是一个有点奇怪的问题,我不知道在哪里可以找到解决办法

在“/”路线上运行的类

parser = reqparse.RequestParser()
parser.add_argument('task')
parser.add_argument('message')

class SimpleRequest(Resource):
    # definiujemy rodzaj zapytania HTTP
    def get(self):
        return "hello world"

    def post(self):
        args = parser.parse_args()
        return args['message']

正如我们所看到的,它返回它作为请求体得到的内容

简单测试

    def test_simple_request(self):
        result = requests.get(f'{APP_URL}/')
        self.assertEqual(result.status_code, 200)
        test_text = 'simple_text'
        message = {"message": test_text}
        result = requests.post(f'{APP_URL}/', message)
        self.assertEqual(result.text, test_text)

我正在发送“simple_text”,但我得到的回报是“simple_text”\n,因此我的测试返回断言失败,这可能会导致巨大的错误

我错过什么了吗

debugger screeen


Tags: texttestselfaddparsermessagegetreturn
1条回答
网友
1楼 · 发布于 2024-05-02 05:58:46

首先,发生了什么:

您的代码使用默认的内容类型,即application/json。这是由output_json() method控制的,它使用JSON编码的主体创建响应对象。 在那里你可以看到有趣的部分:

# always end the json dumps with a new line
# see https://github.com/mitsuhiko/flask/pull/1262
dumped = dumps(data, **settings) + "\n"

这是因为这个request

而且here你可以找到背后的理由

那么,该怎么办

使用响应对象的json()方法。它将返回您期望它返回的内容

因此,您的测试应以如下方式结束:

self.assertEqual(result.json(), test_text)

相关问题 更多 >