例如,以下两条路线。
app = Flask(__name__)
@app.route("/somewhere")
def no_trailing_slash():
#case one
@app.route("/someplace/")
def with_trailing_slash():
#case two
根据医生们,理解如下:
"/somewhere/"
的请求将返回一个404响应。"/somewhere"
是有效的。"/someplace/"
是有效的,"/someplace"
将重定向到"/someplace/"
我希望看到的行为是案例2行为的“逆”。例如,"/someplace/"
将重定向到"/someplace"
,而不是反过来。是否有一种方法来定义采取这种行为的路线?
根据我的理解,可以在路径上设置strict_slashes=False
,以便在第一种情况下有效地获得第二种情况下的相同行为,但我想要做的是使重定向行为始终重定向到URL,而不使用尾斜杠。
我想过的一个解决方案是为404使用一个错误处理程序,如下所示。(不确定这是否有效)
@app.errorhandler(404)
def not_found(e):
if request.path.endswith("/") and request.path[:-1] in all_endpoints:
return redirect(request.path[:-1]), 302
return render_template("404.html"), 404
但我想知道是否有更好的解决方案,比如类似于strict_slashes=False
的附带应用配置,我可以在全球范围内应用。也许是蓝图还是网址规则?
发布于 2016-11-01 09:37:23
您正在使用strict_slashes
进行正确的跟踪,您可以在Flask应用程序本身上进行配置。这将为创建的每个路由将strict_slashes
标志设置为False
。
app = Flask('my_app')
app.url_map.strict_slashes = False
然后,您可以使用before_request
来检测重定向的尾随/
。使用before_request
将允许您不需要将特殊的逻辑单独应用于每条路由。
@app.before_request
def clear_trailing():
from flask import redirect, request
rp = request.path
if rp != '/' and rp.endswith('/'):
return redirect(rp[:-1])
发布于 2019-01-09 12:43:14
如果您希望两条路线都以相同的方式处理,我会这样做:
app = Flask(__name__)
@app.route("/someplace/")
@app.route("/someplace")
def slash_agnostic():
#code for both routes
发布于 2020-08-31 12:24:22
您还可以在路由定义中使用选项strict_slashes=False:
app.Flask(__name__)
@app.route("/someplace", strict_slashes=False)
# Your code goes here
https://stackoverflow.com/questions/40365390
复制相似问题