Search code examples
pythonrestflaskrestful-urlflask-restful

How to send multiple parameters to route using flask?


I started learning Flask framework recently and made a short program to understand request/response cycle in flask.

My problem is that last method called calc doesn't work.

I send request as:

http://127.0.0.1/math/calculate/7/6

and I get error:

"Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again."

Below is my flask app code:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return "<h1>Hello, World!</h1>"

@app.route('/user/<name>')
def user(name):
    return '<h1>Hello, {0}!</h1>'.format(name)

@app.route('/math/calculate/<string:var1>/<int:var2>')
def calc(var1, var2):
    return  '<h1>Result: {0}!</h1>'.format(int(var1)+int(var2))

if __name__ == '__main__':
      app.run(host='0.0.0.0', port=80, debug=True)

Solution

  • To access request arguments as described in your comment you can use the request library:

    from flask import request
    
    @app.route('/math/calculate/')
    def calc():
        var1 = request.args.get('var1',1,type=int)
        var2 = request.args.get('var2',1,type=int)
        return '<h1>Result: %s</h1>' % str(var1+var2)
    

    The documentation for this method is documented here:

    http://flask.pocoo.org/docs/1.0/api/#flask.Request.args

    the prototype of the get method for extracting the value of keys from request.args is:

    get(key, default=none, type=none)