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

2024-09-27 07:22:06 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的网站中,我有一些url,它们将具有如下尾随参数:

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

Tags: the方法代码用户comappurl参数
2条回答

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

选项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

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


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

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

最好的方法是使用post请求。这样做的优点是没有刷新弹出窗口,但缺点是除非将参数存储在会话中,否则在以后的页面呈现中不会向您提供这些参数。

@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

可以使用隐藏的formfields通过POST在多个页面上传递参数。

<input type="hidden" ...>

相关问题 更多 >

    热门问题