Flask:是否可以使用变量屏蔽URL?

时间:2018-01-10 10:15:47

标签: python flask

我想将变量从站点传递到另一个站点。 这没有问题,因为有很多方法可以做到这一点。 我虽然挣扎,但我怎么能隐藏#39;这些变量在URL中,但仍能够获取值。 例: 如果我使用' request.args.get':

@page.route('/users', methods=['GET', 'POST'])
def users():
    user = request.args.get('user')
    return render_template('users.html', user=user)

当我点击链接时,生成的URL是: http://localhost:5000/users?user=john

我的目标是访问'用户'页面,在约翰'部分,但用户将在URL路径中看到的内容仅为http://localhost:5000/users

3 个答案:

答案 0 :(得分:0)

如果您只想隐藏变量名称,则可以使用转换器创建类似'users/<str:username>'的路径。您的网址为http://localhost:5000/users/john

您可以在此处找到文档:http://exploreflask.com/en/latest/views.html#built-in-converters

请注意,完全隐藏变量意味着您的用户将无法为他们所在的页面添加书签。另外,如果他们将/users加入书签,你就必须注意你的变量没有被发送或遇到错误。

答案 1 :(得分:0)

Post方法可以隐藏URL中的数据和变量。所以你需要将它集成到你的项目中。这是一个例子。

app.py

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/users', methods=['GET', 'POST'])
def show_users():
    if request.method == 'POST':
        username = request.form.get("username", None)
        return render_template('post_example.html', username = username)
    else:
        return render_template('post_example.html')

if __name__ == '__main__':
    app.run(debug = True)

post_example.html

<html>
  <head></head>
  <body>
    {% if username %}
      Passed username: {{ username }}
    {% endif %}
    <form action="/users" method="post">
      Username: <input type="text" name="username">
      <input type="submit" name="submit" value="Submit">
    </form>
  </body>
</html>

输出:

post example in Flask

您可以检查HTTP方法in Flask official documentation here

答案 2 :(得分:0)

我能够通过以下方式实现我的目标:

window.history.pushState({"html":response.html,"pageTitle":response.pageTitle},"", "/users/");

我不是Web Dev'er,只是一个Python / Flask爱好者,并且知道'window.history.pushState()'是出于其他目的。我也知道它是HTML5功能,并非所有浏览器都兼容。但是,嘿,它做了伎俩;)。

除非有人指出我不应该使用这种方法的原因,否则这是我的解决方案。

感谢您的所有时间