如何从Flask python中的URL中删除参数

Stu*_*Cat 9 python url flask

在我的网站上,我的网址将包含以下参数:

example.com/magicpage/?p=10&d=somestuff
Run Code Online (Sandbox Code Playgroud)

在处理请求后,我有办法删除这些参数吗?因此,当用户单击链接时,会传递参数,但可见URL只是example.com/magicpage

更多细节:

example.com/magicpage
Run Code Online (Sandbox Code Playgroud)

Zag*_*ags 8

有两种方法可以做到这一点.

选项1:使用POST参数而不是GET.

如果参数由HTML表单传递,请添加method=post<form>标记,然后从以下位置更改页面:

@app.route("/magicpage")
def magicPage():
    param1 = request.args.get("param1")
    param2 = request.args.get("param2")
Run Code Online (Sandbox Code Playgroud)

至:

@app.route("/magicpage", methods=["POST"])
def magicPage():
    param1 = request.form.get("param1")
    param2 = request.form.get("param2")
Run Code Online (Sandbox Code Playgroud)

好处是没有重定向.缺点是,如果用户尝试刷新生成的页面,他们将获得有关重新提交信息的令人讨厌的浏览器弹出窗口:

Firefox刷新POST网页的确认

也就是说,这是在网络中传递隐藏参数的更常见方式.


选项2:处理参数后进行重定向.

这有点复杂,因为我们要重定向到同一页面,我们需要检查它们是第一次还是第二次来到这个页面.

执行此操作的最佳方法是使用发布请求.这样做的好处是没有刷新弹出窗口,但缺点是在后面的页面渲染中不提供参数,除非您将它们存储在会话中.

@app.route("/magicpage", methods=["GET", "POST"])
def magicPage():
    if request.method == 'POST':
        # process parameters
        redirect(request.path)
    if request.method == "GET":
        # render page
Run Code Online (Sandbox Code Playgroud)

或者,您可以检查是否存在其中一个参数作为指标:

@app.route("/magicpage", methods=["GET", "POST"])
def magicPage():
    if request.form.get("param1", None) is not None:
        # process parameters
        redirect(request.path)
    else:
        # render page
Run Code Online (Sandbox Code Playgroud)

  • @Stupid.Fat.Cat 在这种情况下,您正在寻找的是“会话”。它允许您在请求之间传递信息,而无需使用 url 参数。http://flask.pocoo.org/docs/0.10/quickstart/#sessions (2认同)