Catch-all маршрутизация с использованием Tipfy - PullRequest
2 голосов
/ 19 октября 2010

Используя 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 case, результатом которого является 404.

В качестве альтернативы, есть ли изящный способ обработки 404 в Типфи, который мне не хватает?

Ответы [ 2 ]

4 голосов
/ 20 октября 2010

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

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

сопоставитель пути также соответствует косой черте.

2 голосов
/ 21 октября 2010

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

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

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

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

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

...