繁体   English   中英

Flask (Python):将输入作为参数传递给具有固定 URL 的不同路由的函数

[英]Flask (Python): Pass input as parameter to function of different route with fixed URL

如何让在表单上提交的用户输入显示在固定 URL 上?

@app.route('/', methods=['GET','POST'])
def main():
    if request.method == 'POST':
        msg = request.form['message']
        return redirect(url_for('display_msg', msg=msg))
    else:
        return form


@app.route('/msg')
def display_msg(msg):
    return msg

提交表单时,我收到以下错误:

类型错误:display_msg() 缺少 1 个必需的位置参数:'msg'

如果我将msg初始化为全局变量,然后在main的顶部执行global msg ,则此代码实际上可以正常工作,但它不允许我将msg作为参数传递给display_msg

这将起作用的另一种方法是,如果我将@app.route('/msg')更改为@app.route('/<string:msg>') ,但这会将 URL 更改为用户在表单上提交的任何内容不是我想要的。 我希望 URL 被修复。

由于来自msg的数据已经存储在请求对象中,而不是将其作为参数传递给display_msg ,因此可以按如下方式访问它:

@app.route('/msg')
def display_msg():
    return request.args.get('msg')

发生 TypeError 是因为url_for的关键字参数被传递给请求对象,而不是作为参数传递给display_msg

您需要指定msg参数:

@app.route('/msg/<msg>')
def display_msg(msg):
    return msg

您可以使用全局变量来存储消息并返回到一个固定的 url。

编辑:我更新了display_msg()以使用默认参数。

global_msg = ""
@app.route('/', methods=['GET','POST'])
def main():
    global global_msg
    if request.method == 'POST':
        global_msg = request.form['message']
        return redirect(url_for('display_msg'))
    else:
        return form


@app.route('/msg')
def display_msg(msg = global_msg):
    return msg

希望这对你有帮助。

注意:请不要使用这个答案! 当多个客户端连接到您的服务器并同时访问相同的路由时会发生什么! 他们实际上会在那时之间共享数据!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM