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

时间:2014-10-10 16:10:20

标签: python url flask

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

example.com/magicpage/?p=10&d=somestuff

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

更多详情:

@app.route("/magicpage")
def magicPage():
    parse parameters and do things
    finish up
    remove the trailing parameters in the url
    return the rendered page

2 个答案:

答案 0 :(得分:7)

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

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

如果参数是通过HTML表单传递的,请将method=post添加到<form>标记,然后更改您的网页:

@app.route("/magicpage")
def magicPage():
    param1 = request.args.get("param1")
    param2 = request.args.get("param2")

为:

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

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

Firefox refresh confirmation of a POST webpage

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


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

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

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

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

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

@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

答案 1 :(得分:1)

您可以使用隐藏的表单字段通过POST在多个页面上传递参数。

<input type="hidden" ...>