我使用Python Flask Restful API遇到问题,并且数据进入Elasticsearch,当我用Postman发布新数据时,问题是:
TypeError:“ Response”类型的对象不可JSON序列化
你能帮助我吗?
模型:
from marshmallow import Schema, fields, validate
class Person(object):
def __init__(self,tcno=None,firstname=None,lastname=None,email=None,birthday=None,country=None,gender=None):
self.__tcno = tcno
self.__firstname = firstname
self.__lastname = lastname
self.__email = email
self.__birthday = birthday
self.__country = country
self.__gender = gender
def __repr__(self):
return '<Person(firstname={self.__firstname!r})>'.format(self=self)
class PersonSchema(Schema):
tcno = fields.Str(required=True,validate=[validate.Length(min=11, max=11)])
firstname = fields.Str(required=True)
lastname = fields.Str(required=True)
email = fields.Email(required=True,validate=validate.Email(error="Not a valid email"))
birthday = fields.Date(required=True)
country = fields.Str()
gender = fields.Str()
视图:
from flask import Response, json, request, jsonify, Flask
import requests
from flask_marshmallow import Marshmallow
from flask_restful import Api, Resource
from Person import Person, PersonSchema
app = Flask(__name__)
api = Api(app)
ma = Marshmallow(app)
class Apici(Resource):
def __init__(self):
pass
def get(self,people_id):
url = "http://localhost:9200/people/person/{}".format(people_id)
headers = {"Content-type": "application/json"}
r = requests.get(url=url, headers=headers)
json_data = json.loads(r.text)
if json_data['found'] is False:
mesaj = json.dumps({"found": "False"})
resp = Response(mesaj, status=201, mimetype='application/json')
return resp
return json_data["_source"]
def post(self,people_id):
json_input = request.get_json()
person_schema = PersonSchema()
person, errors = person_schema.load(json_input)
if errors:
return jsonify({'errors': errors}), 422
#result = person_schema(person)
url = "http://localhost:9200/people/person/{}".format(people_id)
headers = {"Content-type": "application/json"}
print(url)
r = requests.post(url=url, json=json_input, headers=headers)
print(r)
json_data = json.loads(r.text)
if json_data["result"] is "Updated":
message = json.loads({"result": "updated"})
resp = Response(message, status=201, mimetype='application/json')
return resp
message = json.loads({"result": "created"})
resp = Response(message, status=201, mimetype='application/json')
return resp #jsonify(result.data)
def put(self):
json_input = request.get_json()
person_schema = PersonSchema()
person, errors = person_schema.load(json_input)
if errors:
return jsonify({'errors': errors}), 422
result = person_schema(person)
url = "http://localhost:9200/people/person/{}".format(request.url[-1])
headers = {"Content-type": "application/json"}
r = requests.post(url=url, json=json_input, headers=headers)
json_data = json.loads(r.text)
if json_data["result"] is "Updated":
message = json.dumps({"result": "updated"})
resp = Response(message, status=201, mimetype='application/json')
return resp
message = json.dumps({"result": "created"})
resp = Response(message, status=201, mimetype='application/json')
return resp #jsonify(result.data)
def delete(self):
url = "http://localhost:9200/people/person/{}".format(request.url[-1])
headers = {"Content-type": "application/json"}
r = requests.delete(url=url,headers=headers)
json_data = json.loads(r.text)
if json_data["result"] == "not_found":
message = json.dumps({"result": "not_found"})
return Response(message, status=201, mimetype='application/json')
message = json.dumps({"result": "deleted"})
resp = Response(message, status=201, mimetype='application/json')
return resp
class ApiciList(Resource):
def __init__(self):
pass
def get(self):
url = "http://localhost:9200/people/person/_search"
body = {"query": {"match_all": {}}}
headers = {"Content-type": "application/json"}
r = requests.get(url=url, json=body, headers=headers)
json_data = json.loads(r.text)
return json_data["hits"]["hits"]
api.add_resource(ApiciList, '/person')
api.add_resource(Apici, '/person/<string:people_id>')
if __name__ == '__main__':
app.run(port=5010,debug=True)
错误:
127.0.0.1 - - [08/Jun/2017 11:37:18] "POST /person/1 HTTP/1.1" 500 -
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python3.6/dist-packages/flask_restful/__init__.py", line 271, in error_router
return original_handler(e)
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.6/dist-packages/flask/_compat.py", line 32, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.6/dist-packages/flask_restful/__init__.py", line 271, in error_router
return original_handler(e)
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.6/dist-packages/flask/_compat.py", line 32, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/usr/local/lib/python3.6/dist-packages/flask_restful/__init__.py", line 481, in wrapper
return self.make_response(data, code, headers=headers)
File "/usr/local/lib/python3.6/dist-packages/flask_restful/__init__.py", line 510, in make_response
resp = self.representations[mediatype](data, *args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/flask_restful/representations/json.py", line 20, in output_json
dumped = dumps(data, **settings) + "\n"
File "/usr/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/usr/lib/python3.6/json/encoder.py", line 201, in encode
chunks = list(chunks)
File "/usr/lib/python3.6/json/encoder.py", line 437, in _iterencode
o = _default(o)
File "/usr/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'Response' is not JSON serializable
编辑:我发现了问题。它在def post(self,people_id)方法中:
if errors:
return jsonify({'errors': errors}), 422
新队:
if errors:
message = json.dumps({'errors': errors})
return Response(message, status=422, mimetype='application/json')
这可以简单地通过以下方式完成:
from flask import jsonify
def myMethod():
....
response = jsonify(data)
response.status_code = 200 # or 400 or whatever
return response
我有一个看起来很常见的问题,但到目前为止,我还没有找到一个适合我的解决方案。我想我只是错过了一些小事情,但我已经崩溃了,请求帮助。我正在尝试使用flask和pymongo获得json输出。 以下是控制台中使用print(结果)的对象: 当我试图返回时,我得到了错误: TypeError: ObjectId类型的对象不是JSON可序列化的 类联系人(资源): 我试过bson。json_util建议。
我正在尝试将文件从mongoDB读取到本地。 我的代码如下:STRING=“myLocalPath”PATH=STRING.json 我得到错误-对象类型'ObjectId'是不是JSON序列化...请建议。
我有一个api,我正在尝试使用Flask Pymongo存储/发布一个用户对象。 但是,我得到了以下错误 文件“/home/kay/.local/share/virtualenvs/server-iT4jZt3h/lib/python3.7/site-packages/flask/json/i│ 尼特。py”,第321行,在jsonify中 │ 转储(数据,缩进=缩进,分隔符=分隔符)“\n”,│
我正在为我的不和谐机器人创建autovc命令,但我遇到了一些错误。代码: 错误: 文件“C:\Users\illus\AppData\Local\Programs\Python\39\lib\site packages\discord\ext\commands\core.py”,第85行,在包装的ret=await coro(*args,**kwargs)文件“d:\BOT\test.py”,第3
我有以下用于序列化查询集的代码: 下面是我的 我需要将其序列化。但它说无法序列化
我有一个存储店铺名称和每日销售额的数据框架。我尝试使用下面的Python脚本将其插入Salesforce。 但是,我收到以下错误: 下面,是数据框的视图。 我使用以下代码将其插入Salesforce。 当执行上面的最后一行时,我得到了错误。 我该如何解决这个问题?