Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Catch http-status code in Flask

Tags:

python

flask

I lately started using Flask in one of my projects to provide data via a simple route. So far I return a json file containing the data and some other information. When running my Flask app I see the status code of this request in terminal. I would like to return the status code as a part of my final json file. Is it possible to catch the same code I see in terminal?

Some simple might look like this

from flask import Flask
from flask import jsonify
app = Flask(__name__)

@app.route('/test/<int1>/<int2>/')
def test(int1,int2):

    int_sum = int1 + int2
    return jsonify({"result":int_sum})

if __name__ == '__main__':
    app.run(port=8082)

And in terminal I get:

enter image description here

like image 805
Peanut Avatar asked Aug 01 '17 19:08

Peanut


2 Answers

You are who set the response code (by default 200 on success response), you can't catch this value before the response is emited. But if you know the result of your operation you can put it on the final json.

@app.route('/test/<int1>/<int2>/')
def test(int1, int2):

    int_sum = int1 + int2

    response_data = {
        "result": int_sum,
        "sucess": True,
        "status_code": 200
    }
    # make sure the status_code on your json and on the return match.
    return jsonify(response_data), 200 # <- the status_code displayed code on console

By the way if you access this endpoint from a request library, on the response object you can find the status_code and all the http refered data plus the json you need.

Python requests library example

import requests

req = requests.get('your.domain/test/3/3')

print req.url # your.domain/test/3/3
print req.status_code # 200
print req.json() # {u'result': 6, u'status_code: 200, u'success': True}
like image 132
DobleL Avatar answered Nov 13 '22 02:11

DobleL


You can send HTTP status code as follow:

@app.route('/test')
def test():
    status_code = 200
    return jsonify({'name': 'Nabin Khadka'}, status_code)  # Notice second element of the return tuple(return)

This way you can control what status code to return to the client (typically to web browser.)

like image 35
Nabin Avatar answered Nov 13 '22 01:11

Nabin