큐: Django 웹 페이지에 실내 온도에 대한 시각화 차트(그래프)를 표시하고 싶습니다. Raspberry Pi와 Django Framework를 사용하는 온도 센서가 있습니다.
A: Django 웹페이지에 실내 온도 시각화 차트를 표시하려면 다음 단계를 따르세요.
- Raspberry Pi를 사용하여 센서에서 온도 데이터를 수집합니다. Adafruit_DHT 또는 w1thermsensor와 같은 Python 라이브러리를 사용하여 온도 센서와 인터페이스하고 데이터를 수집할 수 있습니다. 온도 판독값을 데이터베이스에 저장합니다.
- 예를 들어 Django용 차트 라이브러리를 설치합니다. django-chartit, django-matplotlib 또는 django-plotly. 이러한 라이브러리를 사용하면 데이터베이스의 데이터를 사용하여 차트를 쉽게 만들 수 있습니다.
- 데이터베이스에서 온도 데이터를 가져오고 차트 라이브러리를 사용하여 차트를 생성하는 Django에서 뷰를 생성합니다. 이 보기는 웹 페이지에 차트를 표시하는 템플릿을 렌더링해야 합니다.
- 보기에서 생성된 차트를 표시하는 템플릿을 Django에서 생성합니다. HTML 및 CSS를 사용하여 템플릿의 스타일을 지정하고 시각적으로 매력적으로 보이도록 만들 수 있습니다.
다음은 django-chartit 라이브러리를 사용하여 차트를 만드는 방법의 예입니다.
# views.py
from chartit import DataPool, Chart
from .models import TemperatureReading
def temperature_chart(request):
temperature_data = \
DataPool(
series=
({'options': {
'source': TemperatureReading.objects.all()},
'terms': ('timestamp', 'temperature')}
))
chart = Chart(
datasource=temperature_data,
series_options=
({'options': {
'type': 'line',
'stacking': False},
'terms': {
'timestamp': ('temperature')
}}),
chart_options=
{'title': {
'text': 'Inner Temperature'},
'xAxis': {
'title': {
'text': 'Time'}}})
return render(request, 'temperature_chart.html', {'chart': chart})
이 예에서는 하나를 생성합니다. 데이터 풀 그것은 모든 온도 판독 값을 가져올 것입니다. 온도 판독 모델. 그런 다음 도표 시간 경과에 따른 온도 판독값을 보여주는 선형 차트를 만드는 클래스입니다.
<!-- temperature_chart.html -->
{% extends 'base.html' %}
{% block content %}
<h1>Inner Temperature Chart</h1>
{% if chart %}
{{ chart|load_charts }}
{% endif %}
{% endblock %}
템플릿에서 django-chartit에서 제공하는 load_charts 템플릿 태그를 사용하여 차트를 로드하기만 하면 됩니다. 또한 웹 페이지에 대한 헤더와 몇 가지 기본 서식을 추가합니다.
이러한 파일을 생성한 후 Django 프로젝트의 urls.py 파일에 URL 패턴을 추가하여 URL을 temperature_chart 뷰에 매핑할 수 있습니다.
# urls.py
from django.urls import path
from .views import temperature_chart
urlpatterns = (
path('temperature_chart/', temperature_chart, name="temperature_chart"),
)
큐: 차트 js는 어떻습니까?
A: 예. Chart.js를 사용하여 Django 웹 페이지에서 실내 온도 시각화 차트를 만들 수도 있습니다. 단계는 다음과 같습니다.
- Raspberry Pi를 사용하여 센서에서 온도 데이터를 수집하고 데이터베이스에 저장합니다. Adafruit_DHT 또는 w1thermsensor와 같은 Python 라이브러리를 사용하여 온도 센서와 연결하고 데이터를 수집할 수 있습니다.
- Chart.js를 설치합니다. 프로젝트 디렉토리에 Chart.js 라이브러리를 포함하거나 CDN을 사용하여 이를 수행할 수 있습니다.
- 데이터베이스에서 온도 데이터를 가져오고 Chart.js가 예상하는 형식의 데이터로 JSON 객체를 생성하는 Django에서 뷰를 생성합니다. Django의 JsonResponse 클래스를 사용하여 이 JSON 데이터를 템플릿으로 보낼 수 있습니다.
# views.py
from django.http import JsonResponse
from .models import TemperatureReading
def temperature_chart(request):
temperature_data = TemperatureReading.objects.all().values('timestamp', 'temperature')
data = {
'labels': (str(reading('timestamp')) for reading in temperature_data),
'data': (reading('temperature') for reading in temperature_data),
}
return JsonResponse(data)
이 예제에서는 TemperatureReading 모델에서 모든 온도 판독값을 검색하고 레이블과 날짜라는 두 개의 키가 있는 사전을 만듭니다. labels 키에는 문자열 형식의 타임스탬프 목록이 포함되고 데이터 키에는 온도 판독값 목록이 포함됩니다.
- Chart.js 차트에 대한 Canvas 요소가 포함된 템플릿을 Django에서 생성합니다. JavaScript를 사용하여 차트를 만들고 보기에서 반환된 JSON 개체의 데이터로 차트를 채울 수 있습니다.
<!-- temperature_chart.html -->
{% extends 'base.html' %}
{% block content %}
<h1>Inner Temperature Chart</h1>
<canvas id="temperatureChart"></canvas>
<script>
fetch('{% url "temperature_chart" %}')
.then(response => response.json())
.then(data => {
const ctx = document.getElementById('temperatureChart').getContext('2d');
const chart = new Chart(ctx, {
type: 'line',
data: {
labels: data.labels,
datasets: ({
label: 'Temperature',
data: data.data,
fill: false,
borderColor: 'rgb(75, 192, 192)',
tension: 0.1
})
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
});
</script>
{% endblock %}
템플릿에서 Chart.js 차트를 생성하는 데 사용할 temperatureChart ID가 있는 Canvas 요소를 추가합니다. 또한 JavaScript의 가져오기 기능을 사용하여 temperature_chart 보기에서 온도 데이터를 검색하는 스크립트 태그를 포함합니다. 데이터가 있으면 새 차트 개체를 만들고 해당 유형을 선으로 설정합니다. 그런 다음 JSON 개체의 데이터를 사용하여 차트를 채우고 차트 모양에 대한 몇 가지 옵션을 설정합니다.
- Django 프로젝트의 urls.py 파일에 URL 패턴을 추가하여 URL을 temperature_chart 보기에 매핑합니다.
# urls.py
from django.urls import path
from .views import temperature_chart
urlpatterns = (
path('temperature_chart/', temperature_chart, name="temperature_chart"),
)
이제 방문하실 수 있습니다 http://localhost:8000/온도_차트/ 웹 브라우저에서 Chart.js로 생성된 실내 온도 차트를 볼 수 있습니다.