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',
]
}
Это дает вам большую гибкость - вы можете, например, отправить письмо куда-нибудь, чтобы сообщить, что возникла проблема. Это перехватит все исключения в вашем приложении