Как сохранять данные из 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)

Надеюсь, это может помочь. В случае ошибки, надеюсь, кто-нибудь сможет ее исправить.

Вернуться на верх