Je comprends que la fiole a l’int, float et chemin d’accès de convertisseurs, mais l’application que nous développons a des motifs plus complexes dans son URL.
Y a-t-il un moyen que nous pouvons utiliser des expressions régulières, comme Django ?
Je comprends que la fiole a l’int, float et chemin d’accès de convertisseurs, mais l’application que nous développons a des motifs plus complexes dans son URL.
Y a-t-il un moyen que nous pouvons utiliser des expressions régulières, comme Django ?
Même si Armin me battre pour le punch avec un accepté de répondre, j'ai pensé que je voudrais vous montrer un abrégé exemple de la façon dont j'ai mis en place une regex matcher en Flacon, juste au cas où quelqu'un veut un exemple 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 revenir avec 200: http://localhost:5000/abc0-foo/
cette URL sera de retour avec 404: http://localhost:5000/abcd-foo/
Vous pouvez le brancher dans des convertisseurs de match pour arbitraire expressions: Client Converter
from random import randrange
from werkzeug.routing import Rule, Map, BaseConverter, ValidationError
class BooleanConverter(BaseConverter):
def __init__(self, url_map, randomify=False):
super(BooleanConverter, self).__init__(url_map)
self.randomify = randomify
self.regex = '(?:yes|no|maybe)'
def to_python(self, value):
if value == 'maybe':
if self.randomify:
return not randrange(2)
raise ValidationError()
return value == 'yes'
def to_url(self, value):
return value and 'yes' or 'no'
url_map = Map([
Rule('/vote/<bool:werkzeug_rocks>', endpoint='vote'),
Rule('/vote/<bool(randomify=True):foo>', endpoint='foo')
], converters={'bool': BooleanConverter})
Vous pouvez également écrire un fourre-tout type de route et de faire le routage complexes à l'intérieur de la méthode:
from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'], defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST'])
def catch_all(path):
return 'You want path: %s' % path
if __name__ == '__main__':
app.run()
Cela correspond à toute requête. Voir plus de détails ici: Fourre-Tout de l'URL.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.