Entiendo que Flask tiene los convertidores int, float y path, pero la aplicación que estamos desarrollando tiene patrones más complejos en sus URL.
¿Hay alguna forma en que podamos usar expresiones regulares, como en Django?
Aunque Armin se me adelantó con una respuesta aceptada, pensé en mostrar un ejemplo abreviado de cómo implementé un comparador de expresiones regulares en Flask en caso de que alguien quiera un ejemplo práctico de cómo se podría hacer esto.
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)
esta URL debe regresar con 200: http: // localhost: 5000 / abc0-foo /
esta URL debería volver con 404: http: // localhost: 5000 / abcd-foo /
self.regex
, pero ¿dónde ocurre la coincidencia?Puede conectar convertidores personalizados que coincidan con expresiones arbitrarias: Convertidor personalizado
fuente
to_python
haceTambién puede escribir una captura de todo tipo de ruta y hacer enrutamiento complejo dentro del método:
Esto coincidirá con cualquier solicitud. Vea más detalles aquí: Catch-All URL .
fuente