Eu entendo que o Flask tem os conversores int, float e path, mas o aplicativo que estamos desenvolvendo tem padrões mais complexos em seus URLs.
Existe uma maneira de usar expressões regulares, como no Django?
Mesmo que Armin me supere com uma resposta aceita, pensei em mostrar um exemplo abreviado de como implementei um matcher regex no Flask, apenas no caso de alguém querer um exemplo prático de como isso poderia ser feito.
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)
este URL deve retornar com 200: http: // localhost: 5000 / abc0-foo /
este URL deve retornar com 404: http: // localhost: 5000 / abcd-foo /
self.regex
, mas onde a correspondência acontece?Você pode conectar conversores personalizados que correspondem a expressões arbitrárias: Conversor personalizado
fonte
to_python
significaVocê também pode escrever uma captura de todos os tipos de rota e fazer roteamento complexo dentro do método:
Isso vai corresponder a qualquer pedido. Veja mais detalhes aqui: URL pega-tudo .
fonte