2015-01-21 86 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