从另一个视图中调用json,从一个视图中获取json

时间:2015-10-05 08:30:02

标签: python flask

我有一个返回JSON数据的视图。我想从另一个视图中获取数据,所以我尝试从中调用JSON视图。但是,返回了Response而不是JSON数据。如何从另一个视图调用一个视图并获取数据?

@app.route('/promoters/<int:id>', methods=['GET'])
def get_promoter(id):
    ...

>>> get_promoter(3)
<Response 440 bytes [200 OK]>

2 个答案:

答案 0 :(得分:2)

视图函数的装饰器可以根据它的类型转换Response对象中的返回值(有关这些规则的更多信息,请查看here)。 json数据存储在r.response rResponse对象的位置。

更好的解决方案是创建一个单独的函数,它返回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)
    ...