У меня есть трудоемкий python скрипт, который я запускаю из Flask внешнего интерфейса. Результаты могут быть просмотрены пользователем несколькими способами. Чтобы сэкономить время, я передаю все возможные результаты при первом запуске скрипта. Страница результатов имеет 3 кнопки, позволяющие пользователю просто просматривать данные в предпочтительном формате. К сожалению, каждое нажатие кнопки приводит к повторному запуску сценария.
Я передаю следующее сценарию python, processSCTInput через flask: 1. Файл счета с информацией о материале, 2. Грузовые автомобили, доступные для нести заданные грузы.
Сценарий дает вес и объем использования и стоимость для различных комбинаций грузовиков. Он считает все типы грузовиков возможными и всеми доступными. Он отправляет результаты обратно для AllTrucks и Available truck в виде фреймов данных.
Чтобы упростить понимание результатов, я даю 3 кнопки для ограничения просмотра результатов: 1. На всех доступных грузовиках 2. Для лучшего использования все доступные грузовики для каждого пункта назначения 3. По наилучшей ставке из всех доступных грузовиков
@app.route('/processSCT', methods = ['GET','POST'])
def processSCT():
allOutput,avlOutput,notInPFEP,noPUC=processSCTInput(session)
if request.method == 'POST':
if 'avlTrucks' in request.form:
print('Button Clicked for Customer')
text="Truck Recommendation by Available Trucks"
if session['AvailableTrucks']:
df=avlOutput
else:
df=allOutput
text="blah 1"
return render_template('/resultsSCT.html', tables=[df.to_html(classes='data',header='true',index=False)],text=text)
if 'bestWt' in request.form:
print('Button Clicked')
text="Best Trucks By Utilisation from available Trucks"
if session['AvailableTrucks']:
df=avlOutput
else:
df=allOutput
text="blah 2"
df.sort_values(by=['City','WtUtil%','VolUtil%','%Spend'],ascending=[True,False,False,True],inplace=True)
df=df.drop_duplicates('City')
return render_template('/resultsSCT.html', tables=[df.to_html(classes='data',header='true',index=False)],text=text)
if 'bestRate' in request.form:
print('Button Clicked')
text="blah 3"
if session['AvailableTrucks']:
df=avlOutput
else:
df=allOutput
text="blah 3"
df.sort_values(by=['City','%Spend','WtUtil%','VolUtil%'],ascending=[True,True,False,False],inplace=True)
df=df.drop_duplicates('City')
return render_template('/resultsSCT.html', tables=[df.to_html(classes='data',header='true',index=False)],text=text)
if 'Results' in request.form:
print('Button Clicked')
#return results
return render_template('resultsSCT.html', tables=[allOutput.to_html(classes='data',header='true')])
return render_template('/sct.html',tables=[allOutput.to_html(classes='data',header='true')] )
Я ожидаю, что разные кнопки будут использовать 2 кадра данных, allOutput и avlOutput, полученные в первой строке.
<h3>Processing for All Trucks!</h3>
<br>
<br>
<form method="post" action="", novalidate>
<br>
<div class="divider"></div>
</div><input class = "button" type="submit" name="avlTrucks" value="Available Trucks">
<div class="divider"></div>
<input class = "button" type="submit" name="bestWt" value="Available By Utilisation">
<div class="divider">
</div><input class = "button" type="submit" name="bestRate" value="Available By Rate">
<br>
</h3>
</form>
<br>
<br>
<h3>Results : {{text}}!</h3>
<table class="centered thick-border">
{% for table in tables %}
{{ table|safe }}
{% endfor %}
</table>
<h3><a href="/downloadFiles">Download</a> displayed data as csv files.</h3>
<br>
{% endblock %}
Вместо этого каждое нажатие кнопки приводит к повторному запуску processSCTInput!
Это с python 3.7 и virtualenv, настроенным в соответствии с руководством Мигеля Гринберга. Я полный новичок ie в программировании любого рода. Это достигается с помощью учебников. Чего мне не хватает?