2

En utilisant tipfy, comment peut-on exprimer une route fourre-tout dans urls.py si des routes plus spécifiques ne correspondent pas?Catch-all routing utilisant Tipfy

Tipfy utilise le routage comme Werkzeug, donc il y a ce (en urls.py):

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

Cela correspond points d'entrée les plus aléatoires dans l'application (app.example.com/foo , app.example.com/%20 etc) mais ne couvre pas le cas app.example.com/foo/bar qui se traduit par une 404.

Sinon, est-il un moyen élégant pour gérer 40 4 à Tipfy que j'ai manqué?

Répondre

4

Je pense que vous voulez:

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

Le path matcher correspond également des barres obliques.

+0

Joli, merci beaucoup. –

+0

Cela ne fonctionne pas pour moi. Werkzeug considère 'any' comme un argument de mot clé inattendu. Y a-t-il une syntaxe alternative? –

+0

Voici [les docs] (http://werkzeug.pocoo.org/docs/routing/#werkzeug.routing.PathConverter). Peut-être que «tout» est déroutant parce qu'il y a aussi un autre matcher. Vous pouvez essayer pour voir si cela fonctionne. –

2

Peut-être que vous pourriez écrire articles personnalisés milieu:

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

Afin de lui permettre d'ajouter quelque part tipfy config:

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

Il vous donne toute une flexibilité - vous pouvez par exemple envoyer du courrier quelque part informer qu'il y avait un problème. Cela interceptera toutes les exceptions dans votre demande

+0

C'est une bonne idée en fait. J'accepte seulement l'autre réponse car elle traite plus spécifiquement de la question de la correspondance de l'URL, mais votre point de vue est bien pris. Merci! –