gpt4 book ai didi

python - Flask 在 URL 具有 get 参数时添加斜杠

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:30 27 4
gpt4 key购买 nike

在每种情况下,Flask 似乎都没有在 get 参数之前的 url 末尾添加斜杠。但仅在这种情况下才这样做。

它将/users?uid=1 更改为/users/?uid=1

将其更改为 tha 后,它甚至会给我一个 404 错误。 “在服务器上找不到请求的 URL。如果您手动输入 URL,请检查拼写并重试。”

代码如下:

from flask import Flask, render_template, jsonify, Response, request
app = Flask(__name__)

@app.route("/users")
@app.route("/post")
@app.route("/bookmarks")
@app.route("/<target>")
def category_browser(target = ""):
if(target != "" and target not in ['categories']):
return render_template("404.html")
else:
return render_template("view.html")


if(__name__ == "__main__"):
app.debug = True;
app.run(port=int(80))

最佳答案

当您将路由定义为 @app.route("/users/") 时,您在 Chromium 实例中有一个陈旧的缓存条目。您后来更改为 @app.route("/users"),Chrome 仍将其缓存在尾随 / 中。尝试使用隐身模式访问这个简单示例,并看到 /users?uid=1 保持不变并且没有报告 404。这是我最初访问它时发生的情况(使用 Chrome 42)。

127.0.0.1 - - [07/Jul/2015 14:02:39] "GET /users?target=1 HTTP/1.1" 200 -

然后停止该脚本(感谢完整的几乎独立的示例)并将 @app.route("/users/") 添加到路由列表中,如下 原始的 @app.route("/users/") 路由(具有更高的优先级以便 Flask 首先触发重定向),即:

@app.route("/users")
@app.route("/users/")

(或者简单地删除 @app.route("/users") 装饰器)

现在尝试在您的隐身 session 中再次访问同一页面,请注意在您的控制台中:

127.0.0.1 - - [07/Jul/2015 14:04:11] "GET /users?target=1 HTTP/1.1" 301 -
127.0.0.1 - - [07/Jul/2015 14:04:11] "GET /users/?target=1 HTTP/1.1" 200 -

啊,这是您的重定向。删除我们刚刚添加的额外行,再次尝试转到 /users?target=1,会发生以下情况:

127.0.0.1 - - [07/Jul/2015 14:07:22] "GET /users/?target=1 HTTP/1.1" 404 -

Chrome 在隐身模式下根据缓存条目静默将 URL 重写为 /users/?target=1,并反射(reflect)为只有该 URL 显示在 Flask 访问日志中。

如果你想支持这两种方法,你必须这样做:

@app.route("/users/")
@app.route("/users")

然后两种访问方法都有效:

127.0.0.1 - - [07/Jul/2015 14:08:49] "GET /users/?target=1 HTTP/1.1" 200 -
127.0.0.1 - - [07/Jul/2015 14:08:59] "GET /users?target=1 HTTP/1.1" 200 -

而不是导致:

127.0.0.1 - - [07/Jul/2015 14:10:00] "GET /users?target=1 HTTP/1.1" 301 -
127.0.0.1 - - [07/Jul/2015 14:10:00] "GET /users/?target=1 HTTP/1.1" 200 -

关于python - Flask 在 URL 具有 get 参数时添加斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com