Django API 為 D3 提供數據

来源:https://www.cnblogs.com/sctongye/archive/2019/01/08/10242113.html
-Advertisement-
Play Games

在工作中見過有的人即便使用了Django,依然還在採取json或geojson的文件形式為頁面提供數據,相當於嵌入數據而非載入。下麵是個簡單有效的例子: 先從 model.py 開始 urls.py 建立一個 API 的數據(JSON格式)輸出路徑,另一個給圖像輸出頁面。 views.py 下麵則是 ...


在工作中見過有的人即便使用了Django,依然還在採取json或geojson的文件形式為頁面提供數據,相當於嵌入數據而非載入。下麵是個簡單有效的例子:

先從 model.py 開始

1 # models.py
2 from django.db import models
3 
4 
5 class Play(models.Model):
6     name = models.CharField(max_length=100)
7     date = models.DateTimeField()

urls.py 建立一個 API 的數據(JSON格式)輸出路徑,另一個給圖像輸出頁面。

 1 # urls.py
 2 from django.conf.urls import url
 3 
 4 
 5 from .views import graph, play_count_by_month
 6 
 7 urlpatterns = [
 8     url(r'^$', graph),
 9     url(r'^api/play_count_by_month', play_count_by_month, name='play_count_by_month'),
10 ]

views.py

# views.py
from django.db import connections
from django.db.models import Count
from django.http import JsonResponse
from django.shortcuts import render

from .models import Play


def graph(request):
    return render(request, 'graph/graph.html')


def play_count_by_month(request):
    data = Play.objects.all() \
        .extra(select={'month': connections[Play.objects.db].ops.date_trunc_sql('month', 'date')}) \
        .values('month') \
        .annotate(count_items=Count('id'))
    return JsonResponse(list(data), safe=False)

下麵則是HTML部分

 1 <!DOCTYPE html>
 2 <meta charset="utf-8">
 3 <style>
 4 
 5 body {
 6   font: 10px sans-serif;
 7 }
 8 
 9 .axis path,
10 .axis line {
11   fill: none;
12   stroke: #000;
13   shape-rendering: crispEdges;
14 }
15 
16 .x.axis path {
17   display: none;
18 }
19 
20 .line {
21   fill: none;
22   stroke: steelblue;
23   stroke-width: 1.5px;
24 }
25 
26 </style>
27 <body>
28 <script src="http://d3js.org/d3.v3.js"></script>
29 <script>
30 
31 var margin = {top: 20, right: 20, bottom: 30, left: 50},
32     width = 960 - margin.left - margin.right,
33     height = 500 - margin.top - margin.bottom;
34 
35 var parseDate = d3.time.format("%Y-%m-%d").parse; // for dates like "2014-01-01"
36 //var parseDate = d3.time.format("%Y-%m-%dT00:00:00Z").parse;  // for dates like "2014-01-01T00:00:00Z"
37 
38 var x = d3.time.scale()
39     .range([0, width]);
40 
41 var y = d3.scale.linear()
42     .range([height, 0]);
43 
44 var xAxis = d3.svg.axis()
45     .scale(x)
46     .orient("bottom");
47 
48 var yAxis = d3.svg.axis()
49     .scale(y)
50     .orient("left");
51 
52 var line = d3.svg.line()
53     .x(function(d) { return x(d.month); })
54     .y(function(d) { return y(d.count_items); });
55 
56 var svg = d3.select("body").append("svg")
57     .attr("width", width + margin.left + margin.right)
58     .attr("height", height + margin.top + margin.bottom)
59   .append("g")
60     .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
61 
62 d3.json("{% url "play_count_by_month" %}", function(error, data) {
63   data.forEach(function(d) {
64     d.month = parseDate(d.month);
65     d.count_items = +d.count_items;
66   });
67 
68   x.domain(d3.extent(data, function(d) { return d.month; }));
69   y.domain(d3.extent(data, function(d) { return d.count_items; }));
70 
71   svg.append("g")
72       .attr("class", "x axis")
73       .attr("transform", "translate(0," + height + ")")
74       .call(xAxis);
75 
76   svg.append("g")
77       .attr("class", "y axis")
78       .call(yAxis)
79     .append("text")
80       .attr("transform", "rotate(-90)")
81       .attr("y", 6)
82       .attr("dy", ".71em")
83       .style("text-anchor", "end")
84       .text("Play count");
85 
86   svg.append("path")
87       .datum(data)
88       .attr("class", "line")
89       .attr("d", line);
90 });
91 
92 </script>
93 </body>
94 </html>

輸出結果,大家可以在admin里調整數據。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、長度 2、角度 3、時間 4、解析度 5、顏色 6、函數 7、生成內容 8、圖像 9、數字 1、長度 <length>:數字和單位之間沒有空格,0之後的長度單位是可選的 相對長度單位 em:相對於字體大小 ex:相對於小寫字母"x"的高度,對於很多字體,1ex ≈ 0.5em ch:相對於數字" ...
  • 1、CSS語法 2、@規則 3、註釋 4、層疊 5、優先順序 6、繼承 7、值 8、塊格式化上下文 9、盒模型 10、層疊上下文 11、可替換元素 12、外邊距合併 13、包含塊 14、視覺格式化模型 15、佈局模式 1、CSS語法 屬性:property 值:value CSS聲明:property ...
  • 在面向對象當中繼承是非常重要的,也是面向對象的三大特性之一(繼承、封裝、多態),今天我們來揭開他的神秘面紗。 話不多說,我們上菜。 寫好代碼後我們運行看看效果! 很顯然看出來,公司兩個程式員都繼承了程式員類。 總結: 父類包含了多少內容,派生類(子類)全部接受(包括屬性 欄位 方法等), 可以重寫覆 ...
  • 委托 1、 什麼是委托? 委托就是具有相同簽名和返回值類型的有序方法列表 它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞 如圖: 2、 委托的聲明 先來看看委托是如何聲明的 a、委托類型的聲明看上去與方法的聲明很類似,有返回類型和簽名。返回類型和簽名指定了委托接受的方法的形式 b、 ...
  • 在新的項目里使用倉庫的包 上一講中我們說了 "java~gradle構建公用包並上傳到倉庫" ,如何發佈公用的非自啟動類的包到私有倉庫,而這一講我們將學習如何使用這些包,就像我們使用spring框架里的功能包一樣。 參考:http://www.zhyea.com/2018/04/24/gradle ...
  • 第1章 Spring Data JPA的快速入門 1.1 需求說明 Spring Data JPA完成客戶的基本CRUD操作 1.2 搭建Spring Data JPA的開發環境 1.2.1 引入Spring Data JPA的坐標 使用Spring Data JPA,需要整合Spring與Spri ...
  • 前言 開心一刻 小時候有一次爸爸帶我去偷村頭別人家的梨子,我上樹摘,爸爸在下麵放風,正摘著主人來了,爸爸指著我破口大罵:臭小子,趕緊給我滾下來,敢偷吃別人家梨子,看我不打死你。主人家趕緊說:沒事沒事,小孩子淘氣嘛,多摘點回家吃。我……這坑兒子的爹... 純正的海豹突擊隊 路漫漫其修遠兮,吾將上下而求 ...
  • 讓應用程式在運行時適應客戶需求最常用的方法之一就是使用腳本。但是事物總有兩面性,無一例外。腳本這種方法並非只有好的一面,我們需要在靈活性和可管理性之間權衡。本文不是在理論上討論優缺點的文章,而是從實際出發,展示使用腳本的幾種不同方式,並介紹了一個Spring庫,這個庫提供了方便的腳本基礎設施和一些其... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...