Отправка кода созданных данных формы в POST - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь отправить данные формы в маршрут, как в браузере, но у меня возникли проблемы.Я упростил предоставленный код до минимума, необходимого для воспроизведения проблемы.Я, вероятно, не использую функцию, которую должен, или делаю что-то другое неправильно, но я не могу найти ответ во всех других сообщениях, которые я искал.Я не хочу, чтобы данные были в URL, а скорее доступны через request.form.Я использую Python 2.7.9.Я знаю, что приведенный ниже код в настоящее время НЕ делает то, что я хочу (он помещает словарь formdata в командную строку) и возвращает бесконечный цикл, потому что formdata никогда не читается.Я понимаю это, я просто сделал это, чтобы показать, что я пытаюсь передать formdata функции post, я просто не знаю, как это сделать, и одновременно использую перенаправление.Если я правильно читаю документацию по перенаправлению, кажется, что вы не можете этого сделать.Так есть ли какая-то другая функция, которую я могу использовать, которая будет передавать параметры в URL, а также предоставлять данные формы?Я не использую параметры в коде ниже, но мой реальный код имеет похожую структуру функций, где я их использую.Основная цель здесь - использовать ту же функцию (URL-путь), которая используется, когда «выбор» передается или не отправляется через форму.Любая помощь приветствуется.Спасибо.

from flask import Flask, redirect, url_for, request, render_template

web_server = Flask(__name__)

@web_server.route("/test_<param1>_<param2>",methods=['POST','GET'])
def test1(param1,param2):
    if request.method == 'GET':
        choice1 = 'No choice made yet'
        templateData = {'choice':choice1} 
        return render_template('form_page.html', **templateData)
    elif request.method == 'POST':
        if 'choice' in request.form:
            choice1 = request.form['choice']
            templateData = {'choice':choice1} 
            return render_template('form_page.html', **templateData)
        else:
            formdata = {'choice':'QQQ'}
            p1='AAA'
            p2='BBB'
            # the following line is NOT what I want to do. See question 
            return redirect(url_for('.test1',param1=p1,param2=p2,data=formdata),code=307)


# run server
if __name__ == "__main__":
    web_server.run(host='0.0.0.0',port=80,debug=True)

HTML:

Choice was {{choice}}<br><br>

<form method="post">
Make a choice:
<input type="text" name="choice"><br><br>
<input type="submit">
</form>

<form method="post">
Do anything else:
<input type="text" name="other"><br><br>
<input type="submit">
</form>

1 Ответ

0 голосов
/ 10 сентября 2018

давайте посмотрим, если вы это имеете в виду, посмотрите быстрый и грязный код ниже. Внимательно посмотрите на оператор request.args, где вы можете получить переменные, хранящиеся в URL.

from flask import Flask, redirect, url_for, request, render_template

app = Flask(__name__)

@app.route('/',methods=['POST','GET'])
def test1():
if request.method == 'POST':
    if 'choice' in request.form:
        choice = request.form['choice']
        return render_template('test.html', choice = choice)
    else:
        choice = 'QQQ'
        p1 = 'AAA'
        p2 = 'BBB'
        return redirect(url_for('.test1',param1 = p1, param2 = p2, choice = choice))

choice = request.args.get("choice")
if choice == None:
    choice = 'No choice made yet'
return render_template('test.html',  choice = choice)

if __name__ == "__main__":
    app.run(host='0.0.0.0',port=5000,debug=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...