Ежедневный процесс в Django / Python

У меня есть функция, которая получает текущую валюту доллара с некоторого сайта:

def update_currency(request): import urllib2 import ast from django.conf import settings s = urllib2.urlopen('https://api.privatbank.ua/p24api/pubinfo?exchange=&json&coursid=11').read(1000) data = ast.literal_eval(s) #parse string list to list settings.CURRENCY_USD = float(data[2]['sale']) return redirect(reverse('manager_page')) 

Управляйте валютой обновления, нажимая кнопку. Но что, если менеджер забыл это сделать, тогда валюта не актуальна. Поэтому мне нужно, чтобы эта функция вызывалась один раз в день в какое-то время. Как его реализовать?

Я update_currency валюту в settings.py , потому что этот метод update_currency занимает несколько секунд, чтобы получить валюту с сервера, и я не хочу ее каждый раз, когда клиент покупает что-то

One Solution collect form web for “Ежедневный процесс в Django / Python”

Вы можете планировать рутинные задачи CRON в CLI или Celery в Django. Я предлагаю вам выполнить следующие шаги:

  1. хранить данные из файла настроек (хранить в db или файле JSON или XML-файле)
  2. Сделайте команду управления Django, например update_currency которая выполняет функцию update_currency .
  3. сделать CRON-файл или настроить сельдерей для запуска команды ./manage.py update_currency в определенное время суток.

Обновление. Если вы хотите сохранить данные в базе данных, вы можете создать новую модель и установить связь «одна-ко-многим» между этой моделью и другими моделями, предлагая вам переопределить метод сохранения этой модели, как показано ниже:

 class Currency(models.Model): value = models.IntegerField() ... def save(self, *args, **kwargs): if Currency.objects.all().count() > 0 and self != Currency.objects.all()[0]: obj = Currency.objects.all()[0] obj.value = self.value obj.save(*args, **kwargs) else: super(Currency, self).save(*args, **kwargs) ... 

по методу сохранения у вас есть максимум один экземпляр в следующий раз.


Также благодаря @martinarroyo проект django-priodically очень совершенен и настолько полезен.

  • Ошибка: Сломанная труба
  • Преобразование ISO 8601 даты в секундах в Python
  • Каков тип печати в Python?
  • Необходимые виджеты для отображения 1D консольного приложения
  • Преобразуйте массив numpy в строку CSV и строку CSV обратно в массив numpy
  • Keras: ImportError: нет модуля с именем data_utils
  • чтение и разбор TSV-файла, а затем управление им для сохранения в CSV (* эффективно *)
  • Расширение Python - создание и проверка больших целых чисел эффективно
  • Ошибка импорта hashlib с python 2.7, но не с 2.6
  • Хороший пример реализации многопроцессорности?
  • Как я могу сопоставить python, вызываемый над массивом numpy, как элегантным, так и эффективным способом?
  • Python - лучший язык программирования в мире.