shr*_*nde 5 python url flask python-2.7
我的Flask应用程序将url路由定义为
self.add_url_rule('/api/1/accounts/<id_>', view_func=self.accounts, methods=['GET'])
Run Code Online (Sandbox Code Playgroud)
问题是对此应用程序进行查询的应用程序之一添加额外的/在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'])
Run Code Online (Sandbox Code Playgroud)
有很多这样的路线,这是丑陋的解决方法.在点击路由逻辑之前,是否有一种方法可以修改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)
Run Code Online (Sandbox Code Playgroud)
您可能希望记录您正在应用此转换以及诊断信息(例如REMOTE_HOST和HTTP_USER_AGENT条目)。就个人而言,我会强迫该特定应用程序尽快生成不中断的URL。
查看WSGI服务器文档,以了解如何添加额外的WSGI中间件组件。