我有一个返回JSON数据的视图。我想从另一个视图中获取数据,所以我尝试从中调用JSON视图。但是,返回了Response
而不是JSON数据。如何从另一个视图调用一个视图并获取数据?
@app.route('/promoters/<int:id>', methods=['GET'])
def get_promoter(id):
...
>>> get_promoter(3)
<Response 440 bytes [200 OK]>
答案 0 :(得分:2)
视图函数的装饰器可以根据它的类型转换Response对象中的返回值(有关这些规则的更多信息,请查看here)。 json数据存储在r.response
r
为Response
对象的位置。
更好的解决方案是创建一个单独的函数,它返回json数据,可以从两个不同的视图函数调用它。
答案 1 :(得分:0)
您可以为视图编写装饰器来处理此问题:
from flask import jsonify
from functools import wraps
def jsonify_or_raw(func):
@wraps(func)
def wrapper(*args, **kwargs):
raw = False
if "raw" in kwargs:
raw = kwargs["raw"]
del kwargs["raw"]
result = func(*args, **kwargs)
return jsonify(result) if not raw else result
return wrapper
您可以像这样使用装饰器:
@app.route('/promoters/<int:id>', methods=['GET'])
@jsonify_or_raw
def get_promoter(id):
return {"your data": "goes here"}
装饰器将处理通过flask.jsonify
在响应中包装您的数据 - 但您也可以通过执行以下操作从另一个视图中获取数据:
@app.route('/some_page', methods=['GET'])
def some_page():
promoter = get_promoter(1, raw=True)
...