将创建表单数据的代码提交到POST

问题描述 投票:-1回答:1

我正在尝试将表单数据提交到路由,类似于浏览器的方式,但遇到了麻烦。我已经将提供的代码简化为我需要重现的最小问题。我可能没有使用我应该使用的功能或做其他错误但我找不到我搜索过的所有其他帖子中的答案。我不希望数据在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>
python redirect flask
1个回答
0
投票

让我们看看这是不是你的意思,看下面的快速和脏代码。仔细查看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)
© www.soinside.com 2019 - 2024. All rights reserved.