Python 3.x Falcon无法读取请求正文

Python 3.x Falcon无法读取请求正文,python-3.x,rest,gunicorn,Python 3.x,Rest,Gunicorn,我试图用JSON数据读取一个简单的请求体 请求机构: [ { ...data }, { ...data } ] 当我尝试时(在EventResource中) 以下内容登录到控制台:b' 我不知道我做错了什么,也不知道为什么它没有显示我的身体数据。我看到的每一个例子都是这样做的,它实际上记录了数据,而不是我得到的数据 Requirements.txt(可能有些不符合上下文,但我添加了完整的列表以确保。) app.py api = falcon.API(middleware=[ f

我试图用JSON数据读取一个简单的请求体

请求机构:

[
{
    ...data
},
{
    ...data
}
]
当我尝试时(在
EventResource
中)

以下内容登录到控制台:
b'

我不知道我做错了什么,也不知道为什么它没有显示我的身体数据。我看到的每一个例子都是这样做的,它实际上记录了数据,而不是我得到的数据

Requirements.txt(可能有些不符合上下文,但我添加了完整的列表以确保。)

app.py

api = falcon.API(middleware=[
falcon_jsonify.Middleware(help_messages=settings.DEBUG)
])
routes.py

from app import api
from resources.event import EventResource
from resources.venue import VenueResource

# EventResources
api.add_route('/api/event', EventResource())
api.add_route('/api/event/{event_id}', EventResource())
api.add_route('/api/venue/{venue_id}/events', EventResource())

# VenueResources
api.add_route('/api/venue', VenueResource())
api.add_route('/api/venue/{venue_id}', VenueResource())
api.add_route('/api/event/{event_id}/venue', VenueResource())
我使用
gunicorn routes:api--reload运行我的项目

POST请求示例(记录
b''
):

我作为标题添加的唯一内容是
内容类型
/
应用程序/json


我已经通读了,但对我没有帮助。

这种行为的发生是因为你的

falcon_jsonify.Middleware(help_messages=settings.DEBUG)
该流已被它读取。在这种情况下,您需要使用
req.json
。如果删除中间件,则
req.stream.read()
将正确返回值。如果您查看中间件的
process\u request
方法

def process_request(self, req, resp):
    if not req.content_length:
        return

    body = req.stream.read()
    req.json = {}
    self.req = req
    req.get_json = self.get_json

    try:
        req.json = json.loads(body.decode('utf-8'))

    except ValueError:
        self.bad_request("Malformed JSON", "Syntax error")

    except UnicodeDecodeError:
        self.bad_request("Invalid encoding", "Could not decode as UTF-8")

您可以看到中间件读取主体,然后在
req.json
中将其作为解析对象吐出。但原始身体不会保存在其他任何地方。一旦请求流被读取,您就清空了它的缓冲区,不再获取数据。因此,您可以得到
b'

我可以组合的最简单的示例非常有效。请附上一份。您发布的代码不足以让我们提供帮助。@NathanVērzemnieks很抱歉回复太晚,我已经更新了我的问题,希望能更好地了解我正在使用/尝试做什么。没问题!这可能会有帮助。请包括你是如何提出你的要求以及。今天晚些时候我会再看一遍。@NathanVērzemnieks谢谢!我更新了我的问题,还添加了我的requirements.txt,其中列出了我正在使用的所有软件包。
curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" -X POST http://localhost:8000/api/event
falcon_jsonify.Middleware(help_messages=settings.DEBUG)
def process_request(self, req, resp):
    if not req.content_length:
        return

    body = req.stream.read()
    req.json = {}
    self.req = req
    req.get_json = self.get_json

    try:
        req.json = json.loads(body.decode('utf-8'))

    except ValueError:
        self.bad_request("Malformed JSON", "Syntax error")

    except UnicodeDecodeError:
        self.bad_request("Invalid encoding", "Could not decode as UTF-8")