2016-11-02 75 views
0

我正在创建一个多页的应用程序,在第一页(/ index)用户选择表单中需要的参数,然后他们被发送到服务器(我使用Flask框架) 和参数用于做一些计算并将结果返回到使用D3.js(/ res?par1 = 2 & par2 = 3)可视化数据的新路径。路线只是一个简单的例子。现在在图片上,我想点击一部分(代表数据的子部分)并重定向到新路线:/ res?par1 = 2 & par2 = 3 & sub =“sub1”如何在Flask的2条路径之间传递预处理的数据?

编辑: 我的简化途径的例子是这样的:

@app.route('/<ds>', methods=['GET', 'POST']) 
def treeview(ds): 
    distMeasure = request.args.get('dist') 
    correction = request.args.get('corr') 
    big_json_tree = tree2json(distMeasure, correction, cutStrategy, minSize, maxSize, ..) 

    if request.args.get('node_id'): 
     id = request.args.get('node_id') 
     select_data = select(big_json_tree,id) 
     render_template("nodeview.html", data=select_data) 
    else: 
     render_template("baseview.html", data=big_json_tree) 

所以它的工作原理就像是:我去的URL/DS DIST到nodeview页= P &科尔= A(有更多的参数),并且有一棵树。如果我点击一个树节点,那么我应该被重定向到新页面/ ds?dist = p & corr = a & node_id = 2其中我有一个来自big_json_data的子数据并绘制它。

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

我知道会话,但它似乎并不意味着复杂的对象。

任何想法如何解决这种路由? (无论是在瓶的路线或浏览器侧)

+0

我会尽量保持路由尽可能的简单,并使用[缓存](http://flask.pocoo.org/docs/0.11/patterns/缓存/)暂时存储计算结果。 –

回答

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')) 

类似的东西

+0

感谢您的建议。我不完全明白这对我的情况如何工作。 我会加我的例子:) –

相关问题