以下面两条路线为例。
app = Flask(__name__)
@app.route("/somewhere")
def no_trailing_slash():
#case one
@app.route("/someplace/")
def with_trailing_slash():
#case two
根据the docs,理解如下:
在第一种情况下,对路由"/somewhere/"
的请求将返回404响应。"/somewhere"
有效。
在第二种情况下,"/someplace/"
是有效的,"/someplace"
将重定向到"/someplace/"
我想看到的行为是第二种情况下的逆行为。e、 g."/someplace/"
将重定向到"/someplace"
,而不是相反。有没有办法定义采取这种行为的路线?
根据我的理解,strict_slashes=False
可以在路由上设置,以有效地获得案例2在案例1中的相同行为,但我想做的是使重定向行为始终重定向到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
,我可以全局应用。也许是蓝图或url规则?
如果您希望两条路线的处理方式相同,我将执行以下操作:
您正在使用
strict_slashes
进行正确的跟踪,您可以在Flask应用程序本身上配置它。这将为创建的每个路由将strict_slashes
标志设置为False
然后,您可以使用
before_request
来检测用于重定向的尾随/
。使用before_request
将允许您不需要对每个路由单独应用特殊逻辑相关问题 更多 >
编程相关推荐