Django历史数据曲线开发

B/S架构开发

使用框架:django2.1.4,Highcharts 7.1

数据库:PostgreSQL 10.6

 settings.py

1 DATABASES = {
2     'default': {
3         'ENGINE': 'django.db.backends.postgresql',
4         'HOST': '127.0.0.1',
5         'PORT': '5432',
6         'NAME': 'mydb',
7         'USER': 'postgres',
8         'PASSWORD': 'password',
9     }
 1 # Internationalization
 2 # https://docs.djangoproject.com/en/2.1/topics/i18n/
 3 
 4 LANGUAGE_CODE = 'en-us'
 5 
 6 TIME_ZONE = 'Asia/Shanghai'
 7 
 8 USE_I18N = True
 9 
10 USE_L10N = True
11 
12 USE_TZ = True

models.py

 1 from django.db import models
 2 
 3 # Create your models here.
 4 class Data1(models.Model):
 5     time = models.DateTimeField(auto_now=True)
 6     tag1 = models.FloatField(default=0.0)
 7     tag2 = models.FloatField(default=0.0)
 8     tag3 = models.FloatField(default=0.0)
 9     
10 class TableInfo(models.Model):
11     tbl_name = models.CharField(max_length=20)
12     field_name = models.CharField(max_length=20)
13     
14 class TagInfo(models.Model):
15     tag_name = models.CharField(max_length=20)
16     tag_description = models.CharField(max_length=50)
17     tbl = models.ForeignKey("TableInfo",on_delete=models.CASCADE)

base.html

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>{% block title %} Default title{% endblock %}</title>
 5     {% block js_css %}{% endblock %}
 6 </head>
 7 <body>
 8     {% block content %}{% endblock %}
 9 </body>
10 </html>

spline.html

 1 {% extends "base.html" %}
 2 
 3 {% block title %}Data Display{% endblock %}
 4 
 5 {% block js_css %}
 6 <script type="text/javascript" src="/static/highcharts.js"></script> 
 7 <script type ="text/javascript" src="/static/modules/series-label.js"></script>
 8 <script type ="text/javascript" src="/static/modules/exporting.js"></script>
 9 
10 <script type="text/javascript" src="/static/jquery-3.3.1.min.js"></script>
11 <style type="text/css">
12 #container {
13     min-width: 310px;
14     max-width: 1200px;
15     height: 600px;
16     margin: 0 auto
17 }
18 </style>
19 {% endblock %}
20 
21 {% block content %}
22 <div id="container"></div>
23 <script type="text/javascript">
24 
25 Highcharts.chart('container', {
26     chart:{
27         type:'spline'
28     },
29     title: {
30         text: 'History Curve of Demo Tag 1,2,3'
31     },
32 
33     subtitle: {
34         text: 'History Demo'
35     },
36 
37     xAxis:{
38         title:{
39             text:'Date Time'
40         },
41         categories: {{tt|safe}}
42     },
43 
44     yAxis: {
45         title: {
46             text: 'Value of Tag'
47         },
48         
49     },
50     legend: {
51         layout: 'vertical',
52         align: 'right',
53         verticalAlign: 'middle'
54     },
55 
56      credits:{
57          enabled:false
58      },
59      
60     series: [{
61         name: 'tag1',
62         data: {{tag1}}
63     }, {
64         name: 'tag2',
65         data:{{tag2}}
66     }, {
67         name: 'tag3',
68         data: {{tag3}}
69     }],
70 
71     responsive: {
72         rules: [{
73             condition: {
74                 maxWidth: 500
75             },
76             chartOptions: {
77                 legend: {
78                     layout: 'horizontal',
79                     align: 'center',
80                     verticalAlign: 'bottom'
81                 }
82             }
83         }]
84     }
85 
86 });
87 </script>
88 
89 {% endblock %}

views.py

 1 def addrecord(request):
 2     t1 = random.uniform(0,999)
 3     t2 = random.uniform(0,999)
 4     t3 = random.uniform(0,999)
 5     tt = timezone.now()
 6     
 7     models.Data1.objects.create(tag1=t1,tag2=t2,tag3=t3)
 8     msg="Add Record: %s,%f,%f,%f"%(tt,t1,t2,t3)
 9     return HttpResponse(msg)
10 
11 
12 def display(request):
13 #     tags = models.Data1.objects.filter(time__lt=end_datetime,time__gt=start_datetime)
14     tags = models.Data1.objects.all()
15     context = {
16         "tags":tags
17         }
18     return render(request, "learn/data1.html", context)
19 
20 def getdata(request):
21     tags = models.Data1.objects.all()
22     context = {
23         "tags":tags
24         }
25     return render(request, "learn/data1.html", context)
 1 def spline(request):
 2     start_date = datetime.datetime(2019,1,10,0,0,0)
 3     end_date = datetime.datetime.today()
 4     tags = models.Data1.objects.filter(time__lt=end_date,time__gt=start_date)
 5     data=[[]]
 6     for i in range(0,10):
 7         data.append([])
 8     for tag in tags:
 9 #         data[0].append((tag.time+datetime.timedelta(hours=8)).strftime('%Y-%m-%d %H:%M:%S'))
10         data[0].append(timezone.localtime(tag.time).strftime('%Y-%m-%d %H:%M:%S'))
11         data[1].append(tag.tag1)
12         data[2].append(tag.tag2)
13         data[3].append(tag.tag3)
14     context = {
15         "tt":data[0],
16         "tag1":data[1],
17         "tag2":data[2],
18         "tag3":data[3]
19         }
20     return render(request, "learn/spline.html", context)

urls.py

 1 from django.urls import  path
 2 from . import views
 3 
 4 urlpatterns = [
 5     path('', views.index,name='index'),
 6     path('addrecord/',views.addrecord,name='addrecord'),
 7     path('display/',views.display,name='display'),
 8     path('getdata/',views.getdata,name='getdata'),
 9     path('spline/',views.spline,name='spline'),
10 ]
原文地址:https://www.cnblogs.com/wujianming/p/10249462.html