Flask 返回 Json
一、Flask 返回 Json 科学计数法
在 Flask 中,我们可以通过 jsonify 方法返回 Json 数据。对于数字类型的数据,在传输过程中会出现科学计数法的情况。下面我们来看一个例子:
from flask import Flask, jsonify app = Flask(__name__) @app.route('/') def index(): data = { "large_number": 12345678901234567890 } return jsonify(data) if __name__ == '__main__': app.run()
这时候,我们访问到网页上的数据会出现:
{ "large_number": 1.2345678901234568e+19 }
这种情况下,我们可以使用 simplejson 库中的 dumps 转换。修改上述代码如下:
from flask import Flask, Response import simplejson as json app = Flask(__name__) @app.route('/') def index(): data = { "large_number": 12345678901234567890 } return Response(json.dumps(data), mimetype='application/json') if __name__ == '__main__': app.run()
这时候,我们访问到网页上的数据会正常显示:
{ "large_number": 12345678901234567890 }
二、Flask 返回 Json 文件
我们可以在 Flask 中生成 Json 格式的文件,并且可以直接将该文件返回给前端。下面是一个实例:
from flask import Flask, jsonify import json app = Flask(__name__) @app.route('/file') def file(): data = { "name": "John", "age": 28, "city": "New York" } with open('data.json', 'w') as f: json.dump(data, f) return app.send_static_file('data.json') if __name__ == '__main__': app.run(debug=True)
在本例中,我们使用 json.dump 将数据写入到 data.json 文件中,并通过 Flask 的 send_static_file 方法返回该 Json 文件的内容。
三、Flask 返回 Html
在 Flask 中,我们可以通过 render_template 方法来返回 HTML 页面。下面是一个实例:
from flask import Flask, render_template app = Flask(__name__) @app.route('/index') def index(): return render_template('index.html') if __name__ == '__main__': app.run()
在本例中,我们在 Flask 应用目录下创建了一个名为 index.html 的文件,然后在返回时使用了 render_template 方法。
四、Flask 返回 Json 格式列表
在 Flask 中,实现返回一个 Json 格式的列表,我们可以将所有项都存入一个 Python 的列表中,然后使用 jsonify 方法返回这个列表。下面是一个例子:
from flask import Flask, jsonify app = Flask(__name__) @app.route('/list') def index(): data = [ { "name": "John", "age": 28, "city": "New York" }, { "name": "Jane", "age": 26, "city": "San Francisco" }, { "name": "Bill", "age": 35, "city": "Los Angeles" } ] return jsonify(data) if __name__ == '__main__': app.run(debug=True)
在这个例子中,我们将所有数据都存入了一个列表中,并使用了 jsonify 方法将整个列表作为 Json 格式返回。
五、Flask 返回格式
在 Flask 中,我们可以通过 Response 对象来重新定义返回的格式。下面我们来看一个例子,将返回格式定义为 XML:
from flask import Flask, Response app = Flask(__name__) @app.route('/') def index(): data = ''' John 28 New York ''' return Response(data, mimetype='text/xml') if __name__ == '__main__': app.run(debug=True)
在本例中,我们将数据定义为 XML 格式,并通过 Response 对象将其返回给前端。在 Response 对象中,我们可以自定义 mimetype 来定义返回结果的格式。
六、Flask 返回 Json 数据到前端
在 Flask 中,我们可以通过 Json 数据与前端进行交互。下面是一个例子:
from flask import Flask, jsonify, render_template, request app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/api') def api(): keyword = request.args.get('keyword') result = [ {"name": "John", "age": 28}, {"name": "Jane", "age": 26}, {"name": "Bill", "age": 35} ] if keyword: result = [x for x in result if keyword in x['name']] return jsonify(result) if __name__ == '__main__': app.run(debug=True)
在这个例子中,我们在 Flask 中定义了一个名为 api() 的方法,并通过 render_template 方法将前端页面提供给用户。在前端页面中,我们定义了一个名为 search 的文本框,并使用 jQuery 技术对该文本框进行绑定。当用户在文本框中输入关键字时,会自动执行 Ajax 请求,调用 api() 方法获取数据。
七、Flask 返回 Jsonify 重新渲染页面
在 Flask 中,我们可以通过 jsonify 方法重新渲染页面。下面是一个例子:
from flask import Flask, jsonify, render_template app = Flask(__name__) @app.route('/posts') def posts(): posts = [ {"id": 1, "title": "First post", "content": "Hello world!"}, {"id": 2, "title": "Second post", "content": "Flask is awesome!"}, {"id": 3, "title": "Third post", "content": "Coding is fun!"} ] return render_template('posts.html', posts=posts) @app.route('/like/') def like(post_id): posts = [ {"id": 1, "title": "First post", "content": "Hello world!", "likes": 0}, {"id": 2, "title": "Second post", "content": "Flask is awesome!", "likes": 0}, {"id": 3, "title": "Third post", "content": "Coding is fun!", "likes": 0} ] for post in posts: if post['id'] == post_id: post['likes'] += 1 return jsonify({'likes': posts[post_id-1]['likes']}) if __name__ == '__main__': app.run(debug=True)
在这个例子中,当用户点击喜欢时,会调用 like() 方法,返回 Json 数据。我们在前端页面中使用 jQuery 对数据进行绑定,并重新渲染页面。
八、Flask 返回文件
在 Flask 中,我们可以通过 send_file 方法返回文件。下面是一个例子:
from flask import Flask, send_file app = Flask(__name__) @app.route('/download') def download(): filename = 'data.txt' return send_file(filename, as_attachment=True) if __name__ == '__main__': app.run(debug=True) 在本例中,我们通过 send_file 方法将一个文件返回给前端用户。 九、Flask 返回图片给前端选取 在 Flask 中,我们可以通过 send_file 方法返回图片以供前端进行下载和选择。下面是一个例子: from flask import Flask, send_file app = Flask(__name__) @app.route('/images/') def images(filename): return send_file('images/' + filename, mimetype='image/png') if __name__ == '__main__': app.run(debug=True)
在这个例子中,我们将图片存储在 Flask 目录下的 images 文件夹中,并通过 send_file 方法返回。我们可以在前端页面中使用 img 标签来调用这个方法,并显示图片。