gpt4 book ai didi

python - 如何通过 API 编码 pickle 对象(最好使用 flask-restplus )?

转载 作者:行者123 更新时间:2023-12-03 17:00:32 24 4
gpt4 key购买 nike

我有一个完整记录和完成的 API,使用 flask-restplus 在 python 3.5/flask 中构建。我想添加一大块功能——返回一个 pickle 对象作为我的响应之一。

欢迎不特定于 flask-restplus 的通用解决方案,但由于我的 API 已完全记录并完成(除了这一点),我宁愿坚持下去,而不是从根本上改变我正在使用的框架。

我的模型架构如下所示(简化):

get_fields = api.model('get-myresource', {
'id': fields.Integer(description='Id of the resource.'),
'other_field': fields.Integer(description='some other fields too.'),
'pickled_obj': fields.Raw(description='Marshalling fields.Raw fails, as the serialised binary cant be expressed as json'),
})

还有一个示例类(要 pickle )和我想形成 api 响应的模型:
class MyClass(object):
# An instance of this class will be serialised with pickle
a_prop = None

def a_method(self):
return 'some_result'

obj_instance = MyClass()

class MyDataModel(object):
# It's actually a SQLAlchemy model, where one of the columns is PickleType, but for the sake of a canonical example...
id = 1
other_field = 2
pickled_obj = pickle.dumps(obj_instance)

api端点方法声明为:
import pickle
from flask import request
from flask_restplus import Resource, Namespace
from .my_schema_file import get_fields

api = Namespace('myresource', description='Whatever')

@api.route('')
class MyResource(Resource):

@api.response(200, 'Resource(s) returned successfully', get_fields)
@api.response(400, 'Bad Request')
@api.response(404, 'Not Found')
@api.response(500, 'Application Error')
@api.marshal_with(get_fields, code=200, description='Resource(s) returned successfully')
def get(self):

# Argument parsing and fetch from the database
data = MyDataModel()


return data, 200

在我给出的这个例子中,使用 fields.Raw() 作为 pickle 对象的编码器不起作用(没有 json 表示)。那么我应该怎么做才能最大限度地减少我的 API 框架的重组呢?

[编辑:修复原始 Q 中的语法错误]

最佳答案

最终答案:

最后,我们不再使用 pickle,以避免在更新类时出现版本控制问题,然后尝试从旧版本中解压。

我们最终使用了 this SO answer 中的建议。 ,即使用 jsonpickle库来序列化任意类对象并将其从 API 中吐出。

关于python - 如何通过 API 编码 pickle 对象(最好使用 flask-restplus )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40551215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com