【问题标题】:Capture a list of integers with a Flask route使用 Flask 路由捕获整数列表
【发布时间】:2023-04-05 06:59:01
【问题描述】:

我正在尝试在 Flask 中实现一个基本的计算器。我定义了两个 url 参数,当我只想添加两个值时可以管理。但是,我想添加任意数量的值。如何在不编写无限长路线的情况下获得整数列表?

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

我试图用这段代码解决我的问题,但它不起作用

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

【问题讨论】:

标签: python flask werkzeug


【解决方案1】:

创建一个匹配逗号分隔数字的custom url converter,将匹配的字符串拆分为一个整数列表,并将该列表传递给视图函数。

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)

app.url_map.converters注册转换器。

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

在路由中使用转换器。 values 将是一个整数列表。

@app.route('/add/<int_list:values>')
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

【讨论】:

    【解决方案2】:

    这个怎么样?我们只是将整数列表作为变量,然后将它们相加。

    import re
    
    from flask import Flask
    
    
    app = Flask(__name__)
    
    
    @app.route('/add/<int_list>')
    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)
    

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 2013-02-13
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 2013-01-01
      • 2016-04-19
      相关资源
      最近更新 更多