2

Использование tipfy, как можно выразить весь маршрут в urls.py, если более конкретные маршруты не совпадают?Catch-all routing using Tipfy

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.

в качестве альтернативы, есть изящный способ обработки 40 4 в Tipfy, что мне не хватает?

ответ

4

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

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

path matcher также соответствует слэш.

+0

Приятный, спасибо. –

+0

Это не работает для меня. Werkzeug видит «any» как неожиданный аргумент ключевого слова. Есть ли альтернативный синтаксис? –

+0

Вот [документы] (http://werkzeug.pocoo.org/docs/routing/#werkzeug.routing.PathConverter). Может быть, «кто-то» вводит в заблуждение, потому что есть и любой помощник. Вы можете попробовать , чтобы узнать, работает ли он. –

2

Может быть, вы могли бы написать на заказ среднего изделия:

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

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

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

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

+0

На самом деле это хорошая идея. Я только принимаю другой ответ, потому что он более конкретно рассматривает вопрос о сопоставлении URL-адреса, но ваша точка хорошо взламывается. Благодаря! –

Смежные вопросы