在将烧瓶响应发送到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,
},
}
希望这能有所帮助。