Django: загрузка данных из API - PullRequest
0 голосов
/ 04 ноября 2010

Я довольно новичок в Django, но я хорошо понимаю основные понятия.Я хорошо знаю Python.У меня есть приложение, и я хочу иметь возможность периодически загружать данные в свое приложение (пока загружая представление).

Эти данные поступают из XML API в сети.Для простоты, скажем, у меня есть только одна модель в Django:

class Event(models.model):
  title = models.CharField(max_length=200)
  location = models.CharField(max_length=200)
  date = models.DateField()

XML, который я хочу загрузить, очень близко соответствует этой модели.В качестве примера:

<nextevent>
  <title>My Conference</title>
  <location>London, UK</location>
</nextevent>

Этот XML может измениться, но каждый раз, когда я загружаю свое представление, я хочу загрузить текущее событие и сохранить его как объект в моем приложении Django.В этом примере я не занимаюсь проверкой дубликатов.

У меня вопрос: где (структурно) лучшее место для загрузки этих данных и как мне программно создать эти объекты в Django?

Примечание: яЯ рад использовать lxml и urllib для анализа и загрузки XML, поэтому ответы не должны слишком подробно останавливаться на этом аспекте.

1 Ответ

3 голосов
/ 04 ноября 2010

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

Если вы хотите делать это периодически или нет в ответ на входящий HTTP-запрос, то самый простой вариант - использовать cron для запуска команды управления - поместить код в app / management / commands, а затем использовать cron для запуска manage .py. Это имеет доступ ко всем Django ORM и т. Д.

Немного сложнее просто импортировать библиотеки Django в простой скрипт Python, который может работать везде, где вы можете запустить Python.

В случае команды управления вы можете получить доступ к ORM точно так же, как в обычном представлении Django:

event = Event()
event.title = xml.title
event.location = xml.location
event.save()

Предполагается, что вы загрузили и проанализировали XML в подходящий объект с именем xml. Если вы хотите быть флешером, вы можете использовать платформу сериализации для автоматического анализа и загрузки вашего XML - но только если вы можете сопоставить форматы XML вверх.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...