Как я могу сохранить единственное значение в Django?

Просто сохраните длину в переменной сначала.

  var len = a.length;
  for (var i = 0; i < len; i++) {
    var element = a[i];
  }
5
задан Edward Dale 9 July 2009 в 20:10
поделиться

7 ответов

Несмотря на то, что базы данных регулярно хранят много строк в любой данной таблице, иметь таблицу только с одной строкой не особенно дорого, если у вас нет (m) индексов, что приведет к потере места. Фактически, большинство баз данных создают множество однострочных таблиц для реализации некоторых функций, таких как монотонные последовательности, используемые для генерации первичных ключей. Я рекомендую вам создать для этого обычную модель.

6
ответ дан 13 December 2019 в 22:13
поделиться

Одно из решений, которое я использовал в прошлом, - использовать функцию кеширования Django. Вы устанавливаете значение True со сроком действия один день (в вашем случае). Если значение не установлено, вы загружаете канал, в противном случае вы ничего не делаете.

Вы можете см. мое решение здесь: Импорт ваших фотографий Flickr с помощью Django

2
ответ дан 13 December 2019 в 22:13
поделиться
  1. ОЗУ энергозависимое , поэтому не постоянное: memcached - это не то, что вы просили.
  2. XML это не правильная технология для хранения одного значения.
  3. RDMS - это не правильная технология для хранения одного значения.
  4. Структура кеширования Django ответит на ваш вопрос, если для CACHE_BACKEND установлено что-либо else than file: // ...

Файловая система - это правильная технология для «сохранения единственного значения».

In settings.py:

 RSS_FETCH_DATETIME_PATH=os.path.join(
     os.path.abspath(os.path.dirname(__file__)),
     'rss_fetch_datetime'
 )

In your rss fetch скрипт:

 from django.conf import settings
 handler = open(RSS_FETCH_DATETIME_PATH, 'w+')
 handler.write(int(time.time()))
 handler.close()

Где бы вы ни читали:

 from django.conf import settings
 handler = open(RSS_FETCH_DATETIME_PATH, 'r+')
 timestamp = int(handler.read())
 handler.close()

Но cron - правильный инструмент, если вы хотите «запускать команду каждый день», например, в 5 утра:

 0 5 * * * /path/to/manage.py runscript /path/to/retreive/script

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

В заключение, цитируя Кена Томпсона:

Один из моих самых продуктивных дней был выбросив 1000 строк кода.

2
ответ дан 13 December 2019 в 22:13
поделиться

Если они нужны только для целей кеширования, почему бы не сохранить их в memcached?

С другой стороны, если вы используете эти данные для других целей (например, отображаете их на странице , или сделать какие-то вычисления и т. д.), то я бы сохранил это в новой модели - в Django вся персистентность строится поверх базы данных через модели, и я бы не стал пытаться использовать другие «умные» решения.

0
ответ дан 13 December 2019 в 22:13
поделиться

One thing I used to do when I was deving with PHP, was to store the xml somewhere, but with a new tag inserted to hold the timestamp of the latest retrieval. It wasn't great, but it was quick and simple.

0
ответ дан 13 December 2019 в 22:13
поделиться

Если это просто, то возникнет идея просто сохранить его в файловой системе ... почему вы не можете этого сделать? Например, у вас может быть модуль siteconfig в одном из ваших приложений, в котором хранятся такие данные. Это может загружать данные из определенного файла, который может быть текстом, JSON, ConfigParser, pickle или любым подходящим форматом. Просто импортируйте куда-нибудь siteconfig , и он сможет загрузить данные и сделать их доступными для других модулей вашего сайта. Вы можете легко расширить это, чтобы содержать объект, похожий на dict, с рядом настроек (например, если у вас когда-либо было несколько каналов, но вы не хотите иметь модель только для 2-3 строк, вы можете легко удерживать последние- извлекаемое время для каждого фида в слове с ключом URL фида).

0
ответ дан 13 December 2019 в 22:13
поделиться

Создать сеансовый ключ, который будет храниться вечно, и обновлять временную метку канала каждый раз, когда вы к нему обращаетесь.

0
ответ дан 13 December 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: