【问题标题】:Catch-all routing using Tipfy使用 Tipfy 的包罗万象的路由
【发布时间】:2011-04-27 07:10:54
【问题描述】:

使用tipfy,如果更具体的路由不匹配,如何在urls.py中表达一个包罗万象的路由?

Tipfy 使用类似 Werkzeug 的路由,所以有这个(在 urls.py 中):

def get_rules(app): 
rules = [ 
    Rule('/<any>', endpoint='any', handler='apps.main.handlers.MainHandler'), 
    Rule('/', endpoint='main', handler='apps.main.handlers.MainHandler'), 
] 

这将匹配应用程序的大多数随机入口点(app.example.com/fooapp.example.com/%20 等),但不包括app.example.com/foo/bar 导致 404 的情况。

或者,是否有一种优雅的方式来处理我缺少的 Tipfy 中的 404?

【问题讨论】:

    标签: google-app-engine http-status-code-404 url-routing werkzeug tipfy


    【解决方案1】:

    我想你想要:

    Rule('/&lt;path:any&gt;', endpoint='any', handler='apps.main.handlers.MainHandler')

    path matcher 也匹配斜线。

    【讨论】:

    • 这对我不起作用。 Werkzeug 将“任何”视为意外的关键字参数。有替代语法吗?
    • 这里是the docs。也许 'any' 会混淆它,因为还有一个 any 匹配器。您可以尝试 看看它是否有效。
    【解决方案2】:

    也许您可以编写自定义中间件:

    class CustomErrorPageMiddleware(object):    
    def handle_exception(self, e):           
        return Response("custom error page")
    

    要启用它,请在 tipfy 配置中添加某处:

       config['tipfy'] = {
           'middleware': [
               'apps.utils.CustomErrorPageMiddleware',
           ]
       }
    

    它为您提供了相当大的灵活性 - 例如,您可以在某处发送邮件以通知存在问题。这将拦截应用程序中的所有异常

    【讨论】:

    • 这其实是个好主意。我只接受另一个答案,因为它更具体地解决了匹配 URL 的问题,但你的观点是正确的。谢谢!
    猜你喜欢
    • 2011-10-13
    • 2016-08-20
    • 2011-04-02
    • 2021-08-17
    • 2016-02-22
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    相关资源
    最近更新 更多