Reputation: 3952
I am using Python Flask to create a server. I want to send application/json
back to the client (my customer requires this). When I use json.dumps() it is sending back text.
(Incase your wondering, if I use jsonify() instead of json.dumps(), I do get application/json, however this function seems to have problems with some data (if I dont get a solution here, I will look further into jsonify)).
server..............
import json
from flask import Flask, render_template, url_for, current_app, request, jsonify
app = Flask(__name__)
@app.route("/<arg1>")
def route1(arg1):
dict1 = {"prop1": "p1", "prop2": "p2"}
#return jsonify(dict1) # this sends 'application/json'
return json.dumps(dict1) # this sends ' text/html; charset=utf-8'
app.run(host="0.0.0.0", port=8080, debug=True)
Test client (actual client is provided by customer) ......
import pycurl
import cStringIO
SERVER_URL = "http://192.168.47.133:8080"
buf = cStringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, SERVER_URL + '/index.html?city=perth')
c.setopt(c.HTTPHEADER, ['Accept:application/json'])
c.setopt(c.WRITEFUNCTION, buf.write)
c.setopt(c.VERBOSE, True)
c.perform()
buf1 = buf.getvalue()
buf.close()
print(buf1)
Upvotes: 18
Views: 21539
Reputation: 51
If you want to return your response as application/json use "return jsonify()"
Upvotes: 1
Reputation: 6566
I would recommend you to use jsonify
which is inbuilt from Flask
.
from flask import jsonify
@app.route("/<arg1>")
def route1(arg1):
return jsonify({'data':{"prop1": "p1", "prop2": "p2"}})
if (typeof result['data'] !== "undefined"){
alert(result["data"]);
}
Upvotes: 12
Reputation: 5154
Change it like this:
from flask import Response
@app.route("/<arg1>")
def route1(arg1):
dict1 = {"prop1": "p1", "prop2": "p2"}
return Response(json.dumps(dict1), mimetype='application/json')
Upvotes: 33