如何在Flask中的两条路线之间传递预处理数据?

时间:2016-11-02 19:22:05

标签: python flask

我正在创建一个多页面应用,在第一页(/ index)用户在表单中选择所需的参数,然后将它们发送到服务器(我使用的是Flask框架) 并且参数用于对数据进行一些计算,结果返回到使用D3.js(/ res?par1 = 2& par2 = 3)可视化数据的新路径。这条路线只是一个更简单的例子。现在在图片上我想点击一个部分(代表数据的子部分)并重定向到新路线:/ res?par1 = 2& par2 = 3& sub =“sub1”

编辑: 我简化的路线示例如下:

cv2.waitkey

所以它的工作原理如下:我使用url / ds进入nodeview页面?dist = p& corr = a(有更多参数)并且有一棵树。如果我单击一个树节点,那么我应该被重定向到新页面/ ds?dist = p& corr = a& node_id = 2其中我有一个来自big_json_data的子数据并且我绘制它。

我的问题是,如果我去新路线我需要初始路线的一些数据,但计算需要时间,所以我想保留计算的对象并在“children”-route中使用它们。我还希望在这些页面上前后移动,而不是一直进行初始计算。

我知道会话,但似乎它并不适用于复杂的对象。

任何想法如何解决这种路由? (在Flask路线或浏览器方面)

1 个答案:

答案 0 :(得分:0)

一个简单的方法来做服务器端将是使用CBV的又名:基于类的视图,(在烧瓶中意味着使用flask.views.Viewflask.views.MethodView作为基本视图类)和将数据保存为类级变量,然后需要共享数据的任何处理函数都需要实现为视图的方法。例如:

import flask
from flask import views

app = flask.Flask(__name__)
app.config.SECRET_KEY = 'xxx'

class IndexView(MethodView):
    _some_processing_var = 100
    _another_var = 2

    def get(self,arg=None):
        if arg is None:
            IndexView._some_processing_var = 55
        else:
            IndexView._another_var = arg
        return flask.jsonify(result=IndexView._another_var*IndexView._some_processing_var)

app.add_url_rule('/','index',view_func=IndexView.as_view('index'))
app.add_url_rule('/<arg>','arg_index',view_func=IndexView.as_view('arg_index'))

类似的东西