Периодически извлекайте данные и отображайте их с помощью Django

Я хотел бы реализовать своего рода систему уведомлений в режиме реального времени в моем приложении Django.

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

Я немного застрял на "ежеминутном извлечении данных". Я слышал о сельдерее ( http://docs.celeryproject.org/en/latest/), но я хотел бы быть уверен, что это путь туда, прежде чем погрузиться, потому что это кажется немного сложным в настройке и использовать.

Если есть простой способ демонизации функции django, или если что-то похожее на то, что я хочу сделать, уже существует, я был бы признателен за любую подсказку!

2 ответа

Решение

Если это простая задача, вы можете сделать с Ajax.

Просто объявите один URL для запроса ajax:

#urls.py

...
url(r'^ajax/my_query$', my_app.views.ajax_processor)
...

тогда в вашем my_app/views.py:

#views.py

def ajax_processor(request):

    ... do the processing you want as if it is a normal web request.
    ... like querying the database
    ... you can return a `json` dictionary 
    ... or a normal `render_to_response` template with html

Это следует делать на стороне сервера. На стороне клиента было бы неплохо использовать jQuery с $.ajax функционировать и сделать это:

$.ajax({
    url:'/ajax/my_query',  // a normal get request
    success:function(data){  // success is the callback when the server responds
        /* if is json what you decided to return then process the json dict
           if is normal html render it wherver you want
        */
    }
});

Это простая установка, немного кода на стороне сервера и немного кода на стороне клиента.

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

Вот хорошее и простое руководство по ajax, предоставленное W3Schools, чтобы помочь вам понять Ajax, и здесь вы можете найти полезную информацию о опросе с помощью ajax/jquery.

Удачи!

Вот несколько вариантов для рассмотрения:

  • сельдерей Да, это не так тривиально настроить, но его очень легко настроить и использовать со своей стороны python/django через django-celery. Также взгляните на периодические задачи сельдерея.

  • RQ (Redis Queue). Простая очередь заданий, которую легко настроить.

  • Джанго-хронограф. Создание и запуск заданий cron легко из команд администратора.

Также см:

Другие вопросы по тегам