Peanut
Peanut

Reputation: 835

Catch http-status code in 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

Upvotes: 6

Views: 6244

Answers (2)

Nabin
Nabin

Reputation: 11776

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.)

Upvotes: 2

DobleL
DobleL

Reputation: 3918

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}

Upvotes: 7

Related Questions