当前位置: 首页 > 面试题库 >

Flask路径中的尾部斜杠

张华池
2023-03-14
问题内容

例如,采取以下两条路线。

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/"

我想看到的行为是 “逆”情况下,两个
行为。例如"/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我可以全局应用的配置。也许是蓝图或URL规则?


问题答案:

您正在使用进行正确的跟踪,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])


 类似资料:
  • 我想重定向下的任何路径到静态应用。下面的视图应该捕获这些路径并提供相应的文件(它只打印本示例的路径)。这适用于,和。为什么路径会导致404错误?

  • 问题内容: 自从我开始解决这个问题已经有几个小时了,我似乎无法解决这个问题。 我有一个可能会导致用户实际输入URL的应用程序。在这种情况下,不难相信用户可能会输入斜杠。例如, www.example.com/users/2和www.example.com/edit/company/123 应该与 www.example.com/users/2/和www.example.com/edit/compa

  • 我正在使用OpenShift 4.3,我已经创建了带有主机名和路径的路由,如下所示 我使用 启动应用程序,它可以正确启动应用程序,但是如果我删除尾部斜杠并使用 它不起作用,它会给出应用程序不可用 即使我没有附加/到路由,我也希望启动应用程序。有办法吗?因为在OpenShift 3.11中,我们使用的是入口,它完全按照我们想要的方式工作。

  • 我有一个Spring Boot1.3应用程序,其中server.contextpath=/ts处于开发模式。 在浏览器中,我可以访问http://localhost:8888/ts或http://localhost:8888/ts/ 谢了。

  • 问题内容: 这个问题已经在这里有了答案 : Python中的Windows路径 (5个答案) 9个月前关闭。 在Python中将字符串设置为Windows的文件路径时,是否需要将其格式设置为: 还是转义不适用于Windows?目前,我的脚本在该行中给了我类似“非ASCII字符”的信息,因此我无法真正进行测试。 问题答案: 简短的回答: 改用gnibbler的建议使用正斜杠。 关于使用原始字符串:

  • 问题内容: 在中使用和普通法有什么区别? 与双反斜杠相反,平台独立性似乎不是原因,因为两个版本都可以在Windows和Unix下运行。 换个问题,如果可以在Unix和Windows上运行,为什么要使用? 问题答案: 使用用于处理文件的Java库,你可以在所有平台上安全地使用(斜杠,而不是反斜杠)。库代码负责在内部将事物转换为特定于平台的路径。 但是,你可能要在UI中使用,因为最好向人们展示在他们的