Catch-all маршрутизация с использованием Tipfy

Используя 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/foo, app.example.com/%20 и т. Д.), Но не охватывает случай app.example.com/foo/bar, который приводит к 404.

В качестве альтернативы, есть ли изящный способ обработки 404 в Tipfy, который я пропускаю?

2 ответа

Решение

Я думаю, что вы хотите:

Rule('/<path:any>', endpoint='any', handler='apps.main.handlers.MainHandler')

Соответствие пути также соответствует слешам.

Может быть, вы могли бы написать пользовательское промежуточное ПО:

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

Чтобы включить его, добавьте куда-нибудь tipfy конфигурации:

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

Это дает вам большую гибкость - вы можете, например, отправить письмо куда-нибудь, чтобы сообщить, что возникла проблема. Это перехватит все исключения в вашем приложении

Другие вопросы по тегам