Flask запущенный скрипт вместо простого отображения переданных значений - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть трудоемкий 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 в программировании любого рода. Это достигается с помощью учебников. Чего мне не хватает?

1 Ответ

0 голосов
/ 21 февраля 2020

Вы отправляете форму.

Вы должны попробовать использовать ajaxCall, поэтому, когда вы нажимаете какую-либо опцию, вы добавляете анимацию в формате gif или js для загрузки данных, а затем используете success из * 1012. * для отображения информации

Похоже на предложение:

function myReport(id){
    $.ajax({
        type: "GET",
        url: "/processSCT",
        data: { option: id},
        success: function(data) {
            $('#result').html(data)
        }, 
        error: function (jXHR, textStatus, errorThrown) {
            alert('Something gots wrong, shit!')
        }
    });
}

И вы должны поместить идентификаторы в таблицы для редактирования указанного c единицы, если вы покажете все из них

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...