gpt4 book ai didi

python - 在路由之前修改 flask url

转载 作者:太空狗 更新时间:2023-10-30 01:05:25 24 4
gpt4 key购买 nike

我的 Flask 应用程序的 url 路由定义为

self.add_url_rule('/api/1/accounts/<id_>', view_func=self.accounts, methods=['GET'])

问题是向此应用程序查询的应用程序之一在 url 中添加了额外的/,例如 /api/1//accounts/id。更正发出此类查询的应用程序不在我的控制范围内,因此我无法更改它。

目前为了解决这个问题我添加了多条规则

self.add_url_rule('/api/1/accounts/<id_>', view_func=self.accounts, methods=['GET'])
self.add_url_rule('/api/1//accounts/<id_>', view_func=self.accounts, methods=['GET'])

有很多这样的路线,这是一个丑陋的解决方法。在到达路由逻辑之前,flask 中有没有一种方法可以修改 URL?

最佳答案

我会在它到达 Flask 之前规范化路径,方法是让托管 WSGI 容器的 HTTP 服务器或位于堆栈之前的代理服务器执行此操作,或者使用 WSGI 中间件。

后者很容易写成:

import re
from functools import partial


class PathNormaliser(object):
_collapse_slashes = partial(re.compile(r'/+').sub, r'/')

def __init__(self, application):
self.application = application

def __call__(self, env, start_response):
env['PATH_INFO'] = self._collapse_slashes(env['PATH_INFO'])
return self.application(env, start_response)

您可能想要记录您正在应用此转换,以及诸如 REMOTE_HOST 和 HTTP_USER_AGENT 条目之类的诊断信息。就个人而言,我会强制该特定应用程序尽快生成未损坏的 URL。

查看您的 WSGI 服务器文档以了解如何添加额外的 WSGI 中间件组件。

关于python - 在路由之前修改 flask url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44652067/

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