Linux开发项目(三)

Django服务器

出于部分功能实现原因,将上位机更换为Raspberry Pi 3B+,使用了Django服务器。所实现的功能具体参考于此:https://zhuanlan.zhihu.com/p/270196679
本篇文章仅涉及上位机环境的部署,下一篇介绍下位机的使用。

一、Django的部署

最便捷的方式是使用pip安装,具体过程参考官方文档:Django文档
创建一个项目:

django-admin startproject house_sensors

创建多个应用,这里涉及了温度和湿度的传感:

python3 manage.py startapp temp
python3 manage.py startapp humi

创建管理员:

python3 manage.py createsuperuser

修改相应文件(详见文末):

模型文件:models.py
视图文件:views.py
路径文件:urls.py
管理文件:admin.py

安装REST API:
通过pip安装

python3 -m pip install djangorestframework

添加serializers.py文件至humi/(同理加至temp/):

from rest_framework import serializers
from humi.models import Humidity
class HumiSerializer(serializers.ModelSerializer):
    class Meta:
        model = Humidity
        fields = ['captime', 'caphumidity']

安装应用:
在house_sensors/setting.py文件的对应位置中加入

INSTALLED_APPS =[
...
'rest_framework',
'temp',
'humi',
]

激活模型:

python3 manage.py makemigrations temp
python3 manage.py makemigrations humi
python3 manage.py migrate

配置路由:
修改house_sensors/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
	path('admin/', admin.site.urls),
	path('temp/', include('temp.urls')),
	path('humi/', include('humi.urls')),
]

运行:

python3 manage.py runserver

http://127.0.0.1:8000访问,完成初步部署。

二、Django相关配置

在上文中完成了Django服务器的初步部署,需要进一步完善相应的功能。

1. 自定义服务器地址

在setting.py文件的对应项中加入Raspberry Pi分配到的IP地址:

ALLOWED_HOSTS = ['192.168.XXX.XXX']

运行时则需要指定IP地址以及端口号:

python3 manage.py runserver 192.168.XXX.XXX:[PORT]
2. 修改语言以及时区

继续修改setting.py文件:

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
...
USE_TZ = False

False是关闭数据库储存数据时使用的UTC时间,有助于后续Highcharts的使用。

3. Highcharts的使用

相关文档:Highcharts教程
在humi以及temp目录下新建templates文件夹,加入以下文件:
base.html

{% load static %}
<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="utf-8"><link rel="icon" href="https://jscdn.com.cn/highcharts/images/favicon.ico">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style>
        </style>

        <script src="https://cdn.highcharts.com.cn/highcharts/highcharts.js"></script>
        <script src="https://cdn.highcharts.com.cn/highcharts/modules/exporting.js"></script>
    </head>
    <body>
        {% block content %} {%endblock %}
    </body>
</html>

temperature_index.html或者humidity_index.html

{% extends 'base.html' %}
{% load static %}
{% block content %}
<div class="row">
    <div class="col-md-12">
        <div id="Humidity"></div>
    </div>
</div>

<script type="text/javascript">
    Highcharts.setOptions({ global: { useUTC: false } });
</script>

<script type="text/javascript">
    Highcharts.chart("Humidity", {
      chart: {
        type: 'spline',
        events: {
          load: function () {
            var series = this.series[0];
            setInterval(function (){
              $.ajax({
                  url:'/humi/get_humidity/',
                  success: function(data) {
                      var y = data.s1[data.s1.length-1];
                      series.addPoint([y.time,y.Temperature], true, true); 
                  },
              });
            },5000);	//刷新速度
          },
        },
      },
      title: {text: '湿度曲线'},
      xAxis: {type: "category",min: 0, max: 75},	//横坐标
	    yAxis: {title: {text: '湿度'}},
      rangeSelector: {
            allButtonsEnabled: true,
            selected: 2
        },
      navigator:{
            enabled:true
        },
      scrollbar: {
        enabled: true
      },
      series: [{
                name: '湿度',
                data: {{res|safe}},
            }],
    });
</script>
{%endblock %}

三、程序附录

仅就humi应用下的举例:
模型文件models.py

from django.db import models

# Create your models here.
class Humidity(models.Model):
	captime=models.DateTimeField(auto_now_add=False)
	caphumidity=models.CharField(max_length=10)

	def __str__(self):
		return self.caphumidity

视图文件views.py:

from django.shortcuts import render
from humi.models import Humidity
from humi.serializers import HumiSerializer
from rest_framework import generics
from django.http import JsonResponse

# Create your views here.
class humidity_api(generics.ListCreateAPIView):
    queryset = Humidity.objects.all()
    serializer_class = HumiSerializer
def humidity(request):
	data = Humidity.objects.all()
	res=[]
	if data:
		for i in data:
			tx=i.captime
			ty=i.caphumidity
			res.append( [tx.isoformat(), float(ty)] )
	return render(request, 'humidity_index.html',locals()) 

def get_humidity(request):
	data = Humidity.objects.all()
	res=[]
	if data:
		for i in data:
			tx=i.captime
			ty=i.caphumidity
			res.append( {"time":tx.isoformat(), "Humidity":float(ty) })
	return JsonResponse({'s1':res})

路径文件urls.py:

from django.conf.urls import url
from humi import views

urlpatterns = [
    url(r'^$', views.humidity,name='humi.humidity'),
    url(r'^humidity_api', views.humidity_api.as_view(),name='humi.humidity_api'),
    url(r'^get_humidity', views.get_humidity,name='humi.get_humidity'),
]

管理文件admin.py:

from django.contrib import admin

# Register your models here.
from .models import *

class HumidityAdmin(admin.ModelAdmin):
	list_display = ('id','captime','caphumidity')
admin.site.register(Humidity,HumidityAdmin)
英文版:The Linux Programmer's Toolbox 内容简介 《Linux开发工具箱:项目开发的最有效途径》将系统性地介绍GNU/Linux的开源工具,并通过可以被读者容易修改的简明示例说明如何使用这些工具,以满足读者的实际需求。《Linux开发工具箱:项目开发的最有效途径》首先介绍如何下载、构建和安装开源项目,如何发布开源工具,以及如何避免将时间浪费到还未准备好的项目中,并引导读者构建自己的项目。然后通过示例演示了如何在文本编辑器中进行查找操作,展示了几个常用文本编辑器中会用到的小技巧。 《Linux开发工具箱:项目开发的最有效途径》接下来对Linux内核的基础知识和操作系统的内部原理进行了详细且通俗易懂的阐述,并示范了如何将这些知识应用到更高级的工具中。还重点讲解sar、vmstat、valgrind和strace等工具的输出,以及如何将它们运用到应用程序中;如何利用各种编程API来开发适用于自己的工具。 最后,作者介绍了可以提高软件性能的工具;解释了如今市面上的多芯CPU的内在原理,并演示了如何从这些系统中获取最佳性能;以及介绍了在各种环境下调试代码的工具和技术。 对于程序员来说,如果希望自己开发出来的程序更为简洁有效,如果想对Linux编程环境有更深刻的理解,那么,《Linux开发工具箱:项目开发的最有效途径》提供的资料相信能给您带来惊喜!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值