Как сохранять данные из API при каждом обновлении (django)
Есть API, который приходит от устройства. Это устройство обновляет свои переменные выборки каждые 2 минуты, результаты могут меняться или нет (из-за некоторых условий). Я хочу хранить этот API точно каждый раз, когда устройство обновляет себя.
Я пробовал использовать фоновые задачи с интервалом в 2 минуты, но, например, последний результат не соответствует API на данный момент, из-за задержки, которая является убедительной. Мне просто интересно узнать, возможно ли сохранить данные сразу после обновления устройства?
Создайте в приложении представление для обработки запроса данных API. В представлении вы можете сделать запрос к API и сохранить данные в модели. Например:
from django.shortcuts import render
import requests
def save_api_data(request):
# Make a request to the API
response = requests.get('http://api.example.com/data')
data = response.json()
# Save the data to the model
device_data = DeviceData.objects.create(
device_id=data['device_id'],
variable1=data['variable1'],
variable2=data['variable2']
)
device_data.save()
return render(request, 'api_data/data_saved.html')
Чтобы сохранять данные из API при каждом их обновлении, вы можете настроить запланированную задачу, которая будет делать запрос к API и сохранять данные в модели через регулярные промежутки времени. Один из способов сделать это - использовать пакет django-scheduler
, который позволяет вам определять запланированные задачи в Django с помощью декоратора @periodic_task
.
Затем в файле приложения tasks.py
определите периодическую задачу для выполнения запроса к API и сохранения данных. Например:
from django_celery_beat.models import PeriodicTask, IntervalSchedule
from django.utils import timezone
@periodic_task(run_every=(IntervalSchedule(minutes=2)))
def save_api_data():
# Make a request to the API
response = requests.get('http://api.example.com/data')
data = response.json()
# Save the data to the model
device_data = DeviceData.objects.create(
device_id=data)
Надеюсь, это может помочь. В случае ошибки, надеюсь, кто-нибудь сможет ее исправить.