解决Flask中 URL 自动添加尾斜线反斜杠的问题

Flask 是轻量级 Python Web 开发框架,提供简单强大的工具构建 Web 应用程序,蓝图(Blueprint)是组织 Flask 应用的一种方式,能将应用拆分成小块的视图和其他功能模块,让代码更具模块化,也更易维护。

使用蓝图时,可将视图、静态文件、模板等拆分到不同模块,之后注册到主应用程序中。这种拆分方式能降低代码复杂度,提高代码的可读性和可维护性。

以下是简单的蓝图使用示例:

from flask import Flask, Blueprint

app = Flask(__name__)
blueprint = Blueprint('example', __name__)

@blueprint.route('/')
def index():
    return 'Hello Flask Blueprint!'

app.register_blueprint(blueprint, url_prefix='/example')

if __name__ == '__main__':
    app.run()

上述示例中,创建了名为 example 的蓝图并注册到主应用程序。url_prefix 参数指定该蓝图所有路由的 URL 前缀 /example,蓝图中定义的视图函数 index 会处理以 /example/ 开头的 URL。

使用 Flask 蓝图并将 Index URL 指向蓝图时,可能遇到访问 Index URL 添加尾斜线反斜杠的情况。

这个问题的原因是 Flask 默认采用严格的 URL 规范,对于以尾斜线结尾的 URL,Flask 会重定向到去掉尾斜线的 URL,而将 Index URL 指向蓝图时,Flask 会自动在后面添加尾斜线。

举例来说,如果蓝图的 Index URL 是 /example,访问 /example 时,Flask 会自动重定向到 /example/。如果程序中没有对反斜杠的路由进行定义,则会报错,导致无法正常访问。

解决 Index URL 添加尾斜线的问题,可通过禁用 Flask 的 URL 严格规范实现。具体操作是在 Flask 应用的配置中,将 strict_slashes 参数设置为 False,代码如下:

app = Flask(__name__)
app.url_map.strict_slashes = False

完整示例

在之前的基础示例中加入禁用 URL 严格规范的语句,完整代码如下:

app = Flask(__name__)
app.url_map.strict_slashes = False

blueprint = Blueprint('example', __name__)

@blueprint.route('/')
def index():
    return 'Hello Flask Blueprint!'

app.register_blueprint(blueprint, url_prefix='/example')

if __name__ == '__main__':
    app.run()
我的笔记