2015-01-21 87 views
2

我正在使用烧瓶网络服务器并希望执行以下功能。向烧瓶中的HTML发送剧情时发生错误

  • 将表单数据从home.html传递到python func plot_perf_metric()。
  • 保存表单数据并调用plot.html。
  • plot.html调用output_plot(),它根据保存的表单数据并从数据库访问值(mongodb)生成一个图表。
  • plot.html打印此图。

我目前没有看到图像显示。

我只收到图像的链接断开。

有人可以帮助我吗?

home.html的

<!DOCTYPE html> 
<html lang="en"> 
<body> 
    <form action="./plot" method="POST"> 
     <input type="radio" name="perf_metric" value="disk"> Disk <br><br> 
     <input type="radio" name="perf_metric" value="memory"> Memory <br><br> 
     <input type="radio" name="perf_metric" value="cpu"> CPU <br><br> 
     <input type="radio" name="perf_metric" value="egress"> Egress <br><br> 
     <input type="radio" name="perf_metric" value="flit"> Flit <br><br> 
     <input type="submit" name="submit_plot" value="Send"> 
    </form> 
</body> 
</html> 

routes.py

from flask import Flask, render_template, send_file 
from flask import request,make_response 
from pymongo import MongoClient 
import matplotlib.pyplot as plt 
from matplotlib.figure import Figure 
import StringIO 
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
import random 

app = Flask(__name__) 

@app.route('/') 
def home(): 
    return render_template('home.html') 


def connect_mongo(text): 
    client = MongoClient() 
    db = client['mydb'] 
    collection = db['vload'] 
    b = list() 
    a = list(collection.find()) 
    for i in range(len(a)): 
     b.append(a[i][text]) 
     return b 

@app.route('/output') 
def output_plot(): 
    fig = Figure() 
    axis = fig.add_subplot(1, 1, 1) 
    b=connect_mongo(plot_perf_metric.text) 
    fig = axis.plot(b) 
    output = StringIO.StringIO() 
    response = make_response(output.getvaluest()) 
    response.mimetype = 'image/png' 
    fig.savefig(output) 
    output.seek(0) 
    return send_file(output, mimetype='image/png') 

@app.route('/plot',methods=['POST']) 
def plot_perf_metric(): 

if(request.form['submit_plot'] == "Send"): 
    text = request.form['perf_metric'] 
    return render_template('plot.html') 

if __name__ == '__main__': 
    app.run(debug=True) 

plot.html

<!DOCTYPE html> 
<html> 
<head lang="en"> 
<meta charset="UTF-8"> 
<title>Plot</title> 
</head> 
<body> 
    <img src="{{ url_for('output_plot') }}" alt="Image Placeholder" height="100"> 
</body> 
</html> 
+0

请问你能否给予充分的taceback? – Nilesh 2015-01-21 12:01:13

回答

1

您需要添加一个路由output_plot

@app.route('/output') 
def output_plot(): 
    fig = Figure() 
    axis = fig.add_subplot(1, 1, 1) 
    b=connect_mongo(plot_perf_metric.text) 
    fig = axis.plot(b) 
    output = StringIO.StringIO() 
    response = make_response(output.getvaluest()) 
    response.mimetype = 'image/png' 
    fig.savefig(output) 
    output.seek(0) 
    return send_file(output, mimetype='image/png') 
+0

添加路线后,我得到一个破碎的图像,而不是我想要的图 – Ram 2015-01-21 13:33:04

+0

您的日志中可能有错误。我的猜测是'plot_perf_metric.text'上的'AttributeError'。你不能像这样访问一个函数内的变量。 – dirn 2015-01-21 15:35:43

+0

是的你的权利。我在网上发现,你可以在函数之外访问一个函数中的变量。除了使用全局变量之外,还有其他方法可以做到吗? – Ram 2015-01-22 05:40:13