在我的网站上,我的网址将包含以下参数:
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)
有两种方法可以做到这一点.
如果参数由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)
好处是没有重定向.缺点是,如果用户尝试刷新生成的页面,他们将获得有关重新提交信息的令人讨厌的浏览器弹出窗口:

也就是说,这是在网络中传递隐藏参数的更常见方式.
这有点复杂,因为我们要重定向到同一页面,我们需要检查它们是第一次还是第二次来到这个页面.
执行此操作的最佳方法是使用发布请求.这样做的好处是没有刷新弹出窗口,但缺点是在后面的页面渲染中不提供参数,除非您将它们存储在会话中.
@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)