原文: https://pythonspot.com/flask-json-and-the-google-charts-api/

本教程将教您如何构建结合 JSON 和 Google Charts API 的 Flask 应用。 如果您在阅读 Flask 之前没有任何经验,我建议您阅读以前的教程,那么它们会很有趣!

获取 JSON 数据

要显示很棒的图表,我们首先需要一些数据。有两种常见的方法可以在 Web 应用程序中获取数据:使用 API(通常为 JSON)的服务器中的数据和数据库中的数据。 我使用 Fixer.io JSON API 来获取一些财务数据,但是任何 JSON API 都可以。 如果您不熟悉 JSON,请参阅此文章

我们编写此脚本来获取汇率:

  1. import json
  2. import urllib2
  3. def getExchangeRates():
  4. rates = []
  5. response = urllib2.urlopen('http://api.fixer.io/latest')
  6. data = response.read()
  7. rdata = json.loads(data, parse_float=float)
  8. rates.append( rdata['rates']['USD'] )
  9. rates.append( rdata['rates']['GBP'] )
  10. rates.append( rdata['rates']['JPY'] )
  11. rates.append( rdata['rates']['AUD'] )
  12. return rates
  13. rates = getExchangeRates()
  14. print rates

使用 Flask 的 Google Charts API

使用 Google Charts API,您可以在网站上显示实时数据。有很多很棒的图表可以轻松添加到 Flask 应用中。我们只需将通过 JSON 从服务器获取并解析的数据提供给 Google Charts API。

为目录创建带有目录/templates/的 flask 应用程序。 这是 Flask 的主要代码:

  1. from flask import Flask, flash, redirect, render_template, request, session, abort
  2. import os
  3. import json
  4. import urllib2
  5. tmpl_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates')
  6. app = Flask(__name__, template_folder=tmpl_dir)
  7. def getExchangeRates():
  8. rates = []
  9. response = urllib2.urlopen('http://api.fixer.io/latest')
  10. data = response.read()
  11. rdata = json.loads(data, parse_float=float)
  12. rates.append( rdata['rates']['USD'] )
  13. rates.append( rdata['rates']['GBP'] )
  14. rates.append( rdata['rates']['HKD'] )
  15. rates.append( rdata['rates']['AUD'] )
  16. return rates
  17. @app.route("/")
  18. def index():
  19. rates = getExchangeRates()
  20. return render_template('test.html',**locals())
  21. @app.route("/hello")
  22. def hello():
  23. return "Hello World!"
  24. if __name__ == "__main__":
  25. app.run()

我们有这个模板:

  1. {% block body %}
  2. <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  3. <div id="chart_div" style="width: 900px; height: 300px;">
  4. <div>
  5. <script type="text/javascript">//<![CDATA[
  6. google.load('visualization', '1', {packages: ['corechart', 'bar']});<br />
  7. google.setOnLoadCallback(drawBasic);</p>
  8. <p>function drawBasic() {</p>
  9. <p> var data = google.visualization.arrayToDataTable([<br />
  10. ['Currency', 'Rate', { role: 'style' }],<br />
  11. ['USD', { {rates[0]}}, 'gold'],<br />
  12. ['GBP', { {rates[1]}}, 'silver'],<br />
  13. ['HKD', { {rates[2]}}, 'brown'],<br />
  14. ['AUD', { {rates[3]}}, 'blue']<br />
  15. ]);</p>
  16. <p> var options = {<br />
  17. title: 'Exchange rate overview',<br />
  18. chartArea: {width: '50%'},<br />
  19. hAxis: {<br />
  20. title: '',<br />
  21. minValue: 0<br />
  22. },<br />
  23. vAxis: {<br />
  24. title: ''<br />
  25. }<br />
  26. };</p>
  27. <p> var chart = new google.visualization.BarChart(document.getElementById('chart_div'));</p>
  28. <p> chart.draw(data, options);<br />
  29. }<br />
  30. //]]> </p>
  31. <p></script>
  32. {% endblock %}

结果:

Flask,JSON 和 Google Charts API - 图1

Flask App

下载 Flask 示例