Ich verstehe, dass Flask die Konverter int, float und path hat, aber die Anwendung, die wir entwickeln, hat komplexere Muster in ihren URLs.
Gibt es eine Möglichkeit, reguläre Ausdrücke wie in Django zu verwenden?
Obwohl Armin mich mit einer akzeptierten Antwort auf den Punkt gebracht hat, dachte ich, ich würde ein abgekürztes Beispiel dafür zeigen, wie ich einen Regex-Matcher in Flask implementiert habe, nur für den Fall, dass jemand ein funktionierendes Beispiel dafür haben möchte, wie dies getan werden kann.
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)
Diese URL sollte mit 200: http: // localhost: 5000 / abc0-foo / zurückgegeben werden
Diese URL sollte mit 404 zurückgegeben werden: http: // localhost: 5000 / abcd-foo /
self.regex
, aber wo findet die Übereinstimmung statt?Sie können benutzerdefinierte Konverter einbinden, die für beliebige Ausdrücke übereinstimmen: Benutzerdefinierter Konverter
quelle
to_python
tutSie können auch einen Catch aller Routentypen schreiben und ein komplexes Routing innerhalb der Methode ausführen:
Dies entspricht jeder Anfrage. Weitere Details finden Sie hier: Catch-All-URL .
quelle