路由前修改Flaskurl

2024-06-02 06:57:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

问题是其中一个应用程序对这个应用程序进行查询时会在url中添加额外的/in,比如/api/1//accounts/id。我无法控制对应用程序进行此类查询的更正,因此无法对其进行更改。在

我已经添加了多个规则来解决这个问题

^{pr2}$

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


Tags: selfviewaddapiid应用程序urlflask
1条回答
网友
1楼 · 发布于 2024-06-02 06:57:16

在路径到达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)

您可能需要记录您正在应用此转换,以及诊断信息,如远程主机和HTTP用户代理条目。就我个人而言,我会强制那个特定的应用程序尽快生成非中断的url。在

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

相关问题 更多 >