Для передачи параметров лучше не добавлять их к URI, так как это может привести к путанице при декодировании маршрута Flask. Вместо этого, если вы сформируете URL как
/plot.png?x=1,2,3,4&y=100,200,300,400
вы можете забрать аргументы через request.args
. Они будут представлены в виде строк, поэтому вам нужно разделить их и преобразовать в целые числа (или числа с плавающей запятой, если вы используете реальные числа)
from flask import request
@app.route('/plot.png')
def plot():
try:
x_values = [int(x) for x in request.args.get('x','').split(',')]
y_values = [int(y) for y in request.args.get('y','').split(',')]
except:
# malformed
У меня есть рабочий пример здесь надежного способа динамической обработки matplotlib. Общая идея
from flask import send_file
@app.route('/plot.png')
def plot_png():
fig, ax = plt.subplots()
draw(ax)
return fig_response(fig)
def fig_response(fig):
"""Turn a matplotlib Figure into Flask response"""
img_bytes = BytesIO()
fig.savefig(img_bytes)
img_bytes.seek(0)
return send_file(img_bytes, mimetype='image/png')
, куда вы поставляете draw()
. Взгляните, однако, на мой пример, поскольку вы хотите добавить несколько заголовков кэша.