6

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)
Dinko Pehar
  • 5,454
  • 4
  • 23
  • 57
Penguen
  • 16,836
  • 42
  • 130
  • 205
  • 2
    Why are you trying to grab var1 as a string? Have you tried it with ? – David Scott Dec 16 '18 at 07:49
  • 3
    The following is working for me: @app.route('/math/calculate//') def calculate(var1,var2): return '

    Result %s

    ' % str(var1+var2)
    – David Scott Dec 16 '18 at 07:55
  • @DavidScottIV Thanks man it is working. But My real intent is : http://127.0.0.1:8081/math/calculate/?var1=4&var2=5 how can I do that? – Penguen Dec 16 '18 at 08:31

1 Answers1

6

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)

David Scott
  • 796
  • 2
  • 5
  • 22