【问题标题】:Flask redirecting to url passing parameters to functionFlask重定向到url传递参数到函数
【发布时间】:2019-07-21 11:48:21
【问题描述】:

我是 Flask 的新手,我被困在一个非常基本的程序中,它只是向用户打招呼,后跟“Hello”,然后是他们的名字。我写的代码如下:

@app.route('/hello/')
def hello(name):
    return "Hello %s"% name

@app.route('/')
def greet():
    guest = "Mike"
    return redirect(url_for('hello',name=guest))

在此,我想在 url "localhost:5000/hello" 上打印“Hello Mike”。但是,它给出了一个错误。通过将行 @app.route('/hello/') 修改为 @app.route('/hello/<name>') 可以解决此错误,但这意味着对于每个不同的用户,它都会重定向到不同的 url。

那么有什么方法可以使重定向的 URL 保持不变,即 "localhost:5000/hello",但函数 hello(name) 仍然接收参数?

【问题讨论】:

    标签: python html flask


    【解决方案1】:

    一种可能性是使用flask.session 将名称存储在一个路由的函数中,并使其在另一个路由中可访问:

    import random, string
    app.secret_key = ''.join(random.choice(string.ascii_letters) for _ in range(30)) 
    #a secret key is required for flask.session
    
    @app.route('/hello/')
    def hello():
      return f'Hello {flask.session["guest"]}'
    
    @app.route('/')
    def greet():
       flask.session['guest'] = 'Mike'
       return flask.redirect('/hello')
    

    因此,当用户导航到localhost:5000时,"Mike"被设置为会话中的名称,当用户被重定向到localhost:5000/hello时,从会话中访问名称值并显示在屏幕上.

    此方法也可以用于POST请求:当用户在前端提交表单时,目标路由可以将访客姓名存储为表单的输入值,然后简单地重定向:

     @app.route('/some_form_route', methods=['POST'])
     def greet():
       flask.session['guest'] = flask.request['name']
       return flask.redirect('/hello')
    

    【讨论】:

    • 谢谢。有用。事后看来,我想我没有意识到我可以将名称“Mike”存储在任何全局变量中,然后在函数 hello 中访问。
    • @HappyMittal 很高兴为您提供帮助。您当然可以使用全局变量进行测试,但对于生产应用程序,它是 not recommended
    猜你喜欢
    • 1970-01-01
    • 2021-04-07
    • 2021-07-23
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2017-12-24
    相关资源
    最近更新 更多