Je comprends que Flask a les convertisseurs int, float et path, mais l'application que nous développons a des modèles plus complexes dans ses URL.
Existe-t-il un moyen d'utiliser des expressions régulières, comme dans Django?
Même si Armin m'a battu avec une réponse acceptée, j'ai pensé montrer un exemple abrégé de la façon dont j'ai implémenté un matcher regex dans Flask au cas où quelqu'un voudrait un exemple fonctionnel de la façon dont cela pourrait être fait.
from flask import Flask
from werkzeug.routing import BaseConverter
app = Flask(__name__)
class RegexConverter(BaseConverter):
def __init__(self, url_map, *items):
super(RegexConverter, self).__init__(url_map)
self.regex = items[0]
app.url_map.converters['regex'] = RegexConverter
@app.route('/<regex("[abcABC0-9]{4,6}"):uid>-<slug>/')
def example(uid, slug):
return "uid: %s, slug: %s" % (uid, slug)
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
cette URL doit renvoyer avec 200: http: // localhost: 5000 / abc0-foo /
cette URL devrait renvoyer avec 404: http: // localhost: 5000 / abcd-foo /
self.regex
, mais où se produit la correspondance?Vous pouvez accrocher des convertisseurs personnalisés qui correspondent à des expressions arbitraires: Convertisseur personnalisé
la source
to_python
faitVous pouvez également écrire un type de route catch all et effectuer un routage complexe dans la méthode:
Cela correspondra à toute demande. Pour en savoir plus, cliquez ici: URL attrape-tout .
la source