如何用消息包解码烧瓶响应



在将烧瓶响应发送到UI之前,我使用消息包对其进行编码。为了做到这一点,我正在覆盖烧瓶响应类

from flask import Flask, Response, jsonify, make_response
import msgpack
import json
class FlaskResponse(Response):
@classmethod
def force_type(cls, rv, environ=None):
if isinstance(rv, dict):
rv = jsonify(rv)
msgData = super(FlaskResponse, cls).force_type(rv, environ)
print "msgData"
print msgpack.packb(json.loads(msgData.data))
return jsonify((msgpack.packb(json.loads(msgData.data))))

我收到错误

UnicodeDecodeError: 'utf8' codec can't decode byte 0x83 in position 0: invalid start byte

有什么建议吗?

我认为问题是您试图将压缩字节发送到jsonify函数,但Flask无法使用它的结构。我可以建议在创建实例后将数据设置为FlaskRequest

from flask import Flask, Response, jsonify
import msgpack

class CustomResponse(Response):
@classmethod
def force_type(cls, response, environ=None):
# create response instance with empty data
flask_response = jsonify()  # type: CustomResponse
if isinstance(response, dict):
# set some data to respose
flask_response.data = msgpack.packb(response)
# set content_type etc...
# flask_response.content_type = 'application/octet-stream'
print(flask_response.data)
# we return response object so we don't need super()
return flask_response

app = Flask(__name__)
app.response_class = CustomResponse

@app.route('/home')
def home():
return {
'example_dict': {
'container_name': 'test',
'id': 100,
},
}

希望这能有所帮助。

最新更新