我在python 2.7上使用Flask,我想将一个值作为json值返回,我试图这样做,
user_id = 100
return_id = {}
return_id['user'] = user_id
return return_id
但是我收到以下错误,
这是完整的追溯,
127.0.0.1 - - [03 / Oct / 2016 15:04:16]" POST / add_new_patient HTTP / 1.1" 500 - 127.0.0.1 - - [03 / Oct / 2016 15:04:30]" OPTIONS / add_new_patient HTTP / 1.1" 200 - [2016-10-03 15:04:30,199] app中的错误:异常 / add_new_patient [POST] Traceback(最近一次调用最后一次):文件 " /mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/flask/app.py" ;, 1988年,在wsgi_app中 response = self.full_dispatch_request()File" /mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/flask/app.py", 第1642行,在full_dispatch_request中 response = self.make_response(rv)File" /mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/flask/app.py" , 第1746行,在make_response中 rv = self.response_class.force_type(rv,request.environ)File" /mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/werkzeug/ wrappers.py&#34 ;, 第847行,在force_type中 response = BaseResponse(* _ run_wsgi_app(response,environ))File" /mnt/663E60F33E60BE25/Users/acer/Documents/code/thalback/venv/local/lib/python2.7/site-packages/werkzeug/test。 PY&#34 ;, 第871行,在run_wsgi_app中 app_rv = app(environ,start_response)TypeError:' dict'对象不可调用
答案 0 :(得分:6)
虽然可以使用json.dumps
从Flask处理程序返回字符串,但首选方法是使用jsonify
,它会添加正确的Content-Type
并接受各种参数,例如你可以打电话:
return jsonify(user=100)
答案 1 :(得分:2)
我在python 2.7上使用Flask,我希望将值作为json值返回
您没有返回JSON字符串!
您正在返回一个python对象。当Flask 看到一个python对象时,它会尝试调用它。当你返回一个字典时,它假定它是一个可调用的并试图调用它。
您需要做的是:
import json
def your_function(..):
...
return json.dumps(return_id)
PS:正如@bereal在答案中正确指出的那样,上述方法不会在响应中添加Content-Type: application/json
标头。您希望使用jsonify(..)
,如他的回答所示。