1.修訂index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Awesome-pyecharts</title> <script src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script> <script type="text/javascript" src="https://assets.pyecharts.org/assets/echarts.min.js"></script> </head> <body> <div id="bar" style="width:1600px; height:800px;"></div> <script> var chart = echarts.init(document.getElementById('bar'), 'white', {renderer: 'canvas'}); var old_data = []; $( function () { fetchData(chart); setInterval(fetchData, 2000); } ); function fetchData() { $.ajax({ type: "GET", url: "http://127.0.0.1:8000/index/bar", dataType: "json", success: function (result) { var options = result.data; chart.setOption(options); old_data = chart.getOption().series[0].data; } }); } function getDynamicData() { $.ajax({ type: "GET", url: "http://127.0.0.1:8000/index/barUpdate", dataType: 'json', success: function (result) { var options = result.data; old_data.push([options.name, options.value]); chart.setOption({ series: [{ data: old_data }] }); } }); } </script> </body> </html> |
2.urls.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | """django_charts URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/2.2/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import path from fruitsapp.views import ChartView, IndexView, ChartUpdateView urlpatterns = [ path('admin/', admin.site.urls), path('index/bar/', ChartView.as_view()), path('index/', IndexView.as_view()), path('index/barUpdate/', ChartUpdateView.as_view()), ] |
3.views.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | import json from random import randrange from django.http import HttpResponse from rest_framework.views import APIView from pyecharts.charts import Bar from pyecharts import options as opts from pyecharts.globals import ThemeType # Create your views here. def response_as_json(data): json_str = json.dumps(data) response = HttpResponse( json_str, content_type="application/json", ) response["Access-Control-Allow-Origin"] = "*" return response def json_response(data, code=200): data = { "code": code, "msg": "success", "data": data, } return response_as_json(data) def json_error(error_string="error", code=500, **kwargs): data = { "code": code, "msg": error_string, "data": {} } data.update(kwargs) return response_as_json(data) JsonResponse = json_response JsonError = json_error def bar_base() -> Bar: c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) .add_xaxis(["椪柑", "蘋果 富士進口", "番石榴 珍珠芭", "香蕉", "木瓜 網室紅肉", "甜橙 柳橙", "火龍果 紅肉"]) .add_yaxis("台北一", [randrange(20, 100) for _ in range(7)]) .add_yaxis("台北二", [randrange(20, 100) for _ in range(7)]) .set_global_opts(title_opts=opts.TitleOpts(title="平均價", subtitle="元")) .dump_options_with_quotes() ) return c class ChartView(APIView): def get(self, request, *args, **kwargs): return JsonResponse(json.loads(bar_base())) cnt = 9 class ChartUpdateView(APIView): def get(self, request, *args, **kwargs): global cnt cnt = cnt + 1 return JsonResponse({"name": cnt, "value": randrange(0, 100)}) class IndexView(APIView): def get(self, request, *args, **kwargs): return HttpResponse(content=open("./templates/index.html").read()) |
沒有留言:
張貼留言