Ежедневный процесс в 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 очень совершенен и настолько полезен.

  • Используя abc.ABCMeta таким образом, он совместим как с Python 2.7, так и с Python 3.5
  • Компилировать Python 2.7.3 из исходного кода в системе с Python 2.7 уже
  • Python 2.7 Комбинируйте abc.abstractmethod и classmethod
  • Opencv3 и Python 2.7 на виртуальном окружении - объект AttributeError: 'module' не имеет атрибута 'createLBPHFaceRecognizer'
  • Найти первый элемент numpy ndarray неизвестной формы
  • Форматирование строки Python - старое `%` vs new `str.format`
  • python `print` не работает в цикле
  • Как нарисовать перекрестье и заложить положение мыши в pyqtgraph?
  • Python - лучший язык программирования в мире.