Captura una lista de enteros con una ruta Flask

Estoy tratando de implementar una calculadora básica en Flask. Defino dos parámetros de url, que son manejables cuando solo quiero agregar dos valores. Sin embargo, quiero añadir cualquier número de valores. ¿Cómo puedo obtener una lista de enteros sin escribir una ruta infinitamente larga?

@app.route('/add/,') def add(n1,n2): sum = n1+n2 return "%d" % (sum) 

Intenté resolver mi problema con este código, pero no funciona

 integer_list = [] @app.route('/add/integer_list') def fun (integer_list): sum = 0 for item in integer_list: sum = sum + item return '%d' % sum 

Cree un convertidor de URL personalizado que coincida con los dígitos separados por comas, divida la cadena coincidente en una lista de entradas y pase esa lista a la función de vista.

 from werkzeug.routing import BaseConverter class IntListConverter(BaseConverter): regex = r'\d+(?:,\d+)*,?' def to_python(self, value): return [int(x) for x in value.split(',')] def to_url(self, value): return ','.join(str(x) for x in value) 

Registre el convertidor en app.url_map.converters .

 app = Flask(__name__) app.url_map.converters['int_list'] = IntListConverter 

Usa el convertidor en la ruta. values serán una lista de ints.

 @app.route('/add/') def add(values): return str(sum(values)) 
 /add/1,2,3 -> values=[1, 2, 3] /add/1,2,z -> 404 error url_for('add', values=[1, 2, 3]) -> /add/1,2,3 

¿Que tal este? Simplemente tomamos la lista de enteros como una variable y luego los summos.

 import re from flask import Flask app = Flask(__name__) @app.route('/add/') def index(int_list): # Make sure it is a list that only contains integers. if not re.match(r'^\d+(?:,\d+)*,?$', int_list): return "Please input a list of integers, split with ','" result = sum(int(i) for i in int_list.split(',')) return "{0}".format(result) if __name__ == '__main__': app.run(debug=True)