Python Flask — обработка входных данных, полученных из внешнего интерфейса, в фоновом режиме.

это скорее вопрос о том, где найти, как я это сделаю, а не о том, как это сделать. Я уверен, что это хорошо освещено, я просто пытаюсь сформулировать правильный термин, который я мог бы использовать в Google и найти ответ.

Во всяком случае, у меня есть веб-приложение Python Flask. На веб-странице есть поле ввода, которое запрашивает ввод данных пользователем. Я хотел бы, чтобы произошло какое-то волшебство с пользовательским вводом в фоновом режиме. В моем собственном сценарии я хотел бы взять URL-адрес, а затем использовать bs4, чтобы выбрать то, что мне нужно, и отобразить это на веб-странице.

Для простоты я попрошу что-нибудь простое, а затем смогу построить его оттуда: если я попрошу пользователя указать число, а затем нажму «Отправить», как я могу умножить число на 10?

Если бы мой код для формы был index.html:

<form class="form-horizontal" role="form" method="post" action="/">
    {{ form.csrf_token }}
        <fieldset>
            <div class="form-group">
                <label for="GetNum" class="col-lg-2 control-label">Enter Number</label>
                    <div class="col-lg-6">
                        <input type="text" id="GetNum" name="GetNum" class="form-control" value="">
                    </div>
                <input class="btn btn-success" type="submit" value="Calculate">
            </div>
        </fieldset>
</form>

Я заметил, что могу получить ввод для печати в абзац с помощью <p>form.request.GetNum</p>.

Теперь для примера этого вопроса код для бэкэнда будет таким:

import math
GetNum = 10  #should be form.request.GetNum value
CalcResult = GetNum*1000
print CalcResult  #  or {{ CalcResult.data }} or something in index.html

Мой контроллер (app.py) выглядит так:

@app.route('/', methods=['GET', 'POST'])
@login_required
    def home():
    error = None
    form = PostForm(request.form)  # unrelated to question, but will this clash?
    if .. :
        do something
        return redirect(..)
    else:
        do something else..
        return render_template(..)       

Меня беспокоит то, что функция home в конечном итоге будет иметь массу кода, если мне придется поместить туда математическую функцию. Итак, tl; dr, как мне реализовать внутреннюю функцию в моем коде? (или, пожалуйста, предоставьте мне материал для чтения, спасибо!)

Еще одна вещь: у меня уже есть форма на моей странице '/', мне придется переименовывать формы, такие как form1 form2, потому что они будут конфликтовать, или все будет в порядке?


person Stuart23    schedule 10.06.2016    source источник


Ответы (1)


В другом месте вашей кодовой базы, либо в том же файле, либо, что более вероятно, в модуле или пакете, вы можете определить эту сложную задачу. Давайте создадим простой модуль complicated.py в том же каталоге, что и другой ваш код, который затем определит сложную задачу:

def do_really_complicated_thing(info):
    # lots of complicated steps
    return really_complicated_data

Затем в нашем коде представления мы можем просто использовать это вместо встраивания:

from complicated import do_really_complicated_thing

@app.route('/', methods=['GET', 'POST'])
@login_required
def home():
    error = None
    form = PostForm(request.form)
    if form.validate_on_submit() :
        info = form.info.data
        complicated_task = do_really_complicated_thing(info)
        return render_template('something', results=complicated_task)
 

Короче говоря, термины, которые вы ищете, это пакеты и модули, они помогают вашему коду быть более аккуратным и пригодным для повторного использования.

Что касается конфликтующих форм — вы можете просто нацелить форму для отправки по определенному маршруту, который просто обрабатывает эту форму, что намного чище, чем необходимость проверки/анализа разных форм на одном маршруте.

person Doobeh    schedule 10.06.2016