Python 3.x Falcon无法读取请求正文
我试图用JSON数据读取一个简单的请求体 请求机构: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
[
{
...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")