Я хочу, чтобы метод GET отправлялся в представление Flask, но я не смог его обработать.Может ли кто-нибудь подсказать мне, что я делаю неправильно? - PullRequest
0 голосов
/ 29 апреля 2019

В моей программе у меня есть запрос GET, отправленный из формы, в представление Flask.

Это форма:

<form method="GET" action="{{url_for('rerouter')}}">
            {{ form.hidden_tag() }}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Search</legend>

                <div>
                    {{ form.welder_selector.label(class="form-control-label") }}
                    {{ form.welder_selector(class="searchable-welder-js",style="width: 28%") }}

                    {{ form.wps_selector.label(class="form-control-label") }}
                    {{ form.wps_selector(class="searchable-wps-js",style="width: 27.8%") }}

                    {{ form.process_selector.label(class="form-control-label") }}
                    {{ form.process_selector(class="searchable-process-js",style="width: 27.8%") }}
                </div>


            </fieldset>
            <div class="form-group">
                 {{ form.submit(class='btn btn-outline-success') }}
            </div>

        </form>

Метод формы, который я установил как GET, и действие также отправляется в представление:

Соответствующий вид:

@app.route("/rerouter", methods=['GET', 'POST'])
def rerouter():

    if request.method == 'GET':
        value1 = request.args.get('welder_selector')
        value2 = request.args.get('wps_selector')
        value3 = request.args.get('process_selector')

        print("Im at rerouter with : ", value1, value2, value3)
        if value1 is not 0 or None:
            if value2 is 0 or None:
                if value3 is 0 or None:

                    return redirect(url_for('welderdatabase', welder_id=value1))
                else:

                    return redirect(url_for('home'))
          ....

Форма HTML сделана здесь в этом представлении:

@app.route("/", methods=['GET', 'POST'])
@app.route("/home", methods=['GET', 'POST'])
def home():

    form = TrialSearchMultipleForm()

    return render_template('home.html', title='Home', form=form)

Я успешно реализовал программу, используя метод POST, но позже узнал, что правильный способ - использовать GET для отправки данных формы.

Что я поймал в консоли

127.0.0.1 - - [29/Apr/2019 09:10:20] "GET /rerouter?welder_selector=__None&wps_selector=__None&process_selector=__None&submit=Search HTTP/1.1" 302 
Im at rerouter with :  __None __None __None

Так что я ищу:

  1. Я не могу понять, почему он возвращает «__Нет». Я хочу понять, почему он возвращает «__None» в запросе GET, а не «None». Я пытался искать ответы выше и выше.
  2. Программа отправляет данные, но они не перенаправляются на какую-либо страницу, просто перезагружаются при просмотре домашней страницы. Я получаю запрос через консоль, поэтому я знаю, что данные отправляются.

Как мне это решить?

  1. Я попытался отключить CSRF, чтобы посмотреть, изменится ли __None на None. Там нет успеха.
  2. Я вроде понимаю, что запрос GET отправляется в виде строки, и, следовательно, это может быть причиной для __None, но как мне обойти это и получить желаемый результат?

Ожидаемый результат:

Я нахожусь на маршруте с: Нет Нет Нет или же Я на маршруте с: 1 Нет Нет (на основании ввода)

И успешное перенаправление на страницу с использованием условий. Мой код не такой чистый, потому что этот раздел программы постоянно менялся, и мне нужно было все сократить, поэтому, пожалуйста, потерпите меня.

Я буду чрезвычайно благодарен за ЛЮБЫЕ указатели или предложения или полезные советы.

1 Ответ

0 голосов
/ 29 апреля 2019

Не знаю, решит ли это вашу проблему - просто бегло взглянув на ваш скрипт на python.

if value1 is not 0 or None:

Это не делает то, что вы думаете, что делает.«Ни один» не считается ложным.То, что вы написали, эквивалентно следующим двум независимым логическим выражениям:

if (value1 is not 0) or (False):

Следовательно, единственная часть этого выражения, которая имеет какое-либо отношение к тому, выполняется ли тело оператора if, является первойчасть (значение 1 не 0).Это означает, что тело вашего оператора if не будет выполнено, если значение1 равно None, если это когда-либо будет иметь место.

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

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

Однако, согласно pep8, когда кто-то проверяет, является ли что-то None, следует отдать предпочтение (value1 не None), чем (value1! = None)).Фиксированное состояние выглядело бы так, на мой взгляд:

if value1 != 0 and value1 is not None:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...