В этом разделе мы рассмотрим RSS способ передачи информации, и расскажем как в Django добавить RSS ленту для нашего блога.
RSS: что это такое
RSS – это компонент, с помощью которого контент ресурса выводится в специально структурированной форме в виде ленты новостей со ссылкой на полную версию в первоисточнике.
Есть несколько версий, как расшифровывается аббревиатура RSS:
Really Simple Syndication– очень простое распространение информации;Rich Site Summary– обогащенная (полноценная) сводка сайта.
Независимо от выбранного варианта перевода, смысл этого понятия не меняется. С момента, когда появилась RSS лента новостей, просмотр контента любимых сайтов заметно упростился. Теперь не надо заходить по несколько раз в день на одни и те же ресурсы, чтобы узнать, какую информацию они недавно опубликовали. Все, что вам интересно, появится в вашей персональной новостной ленте (обратите внимание, что для этого предварительно оформляется RSS-подписка на контент интересующих вас сайтов). RSS-файл, в котором содержится описание или анонс новости со ссылкой на полную версию, обычно записывается в формате rss или xml. Таким файлам присваивается соответствующая тематическая категория, согласно которой они сортируются в ленте.
Как работает RSS-сервис
RSS-лента формируется так:
-
После появления на сайте какой-либо информации специальный скрипт заносит в обновляемый RSS-файл метаданные и краткое описание этой новости.
-
Далее указанный файл считывает программный или онлайн-RSS-агрегатор, который и передает информацию о выходе новых материалов на сайте подписчикам соответствующего канала.
-
Чтобы прочитать новости в ленте, пользователь должен использовать RSS-ридер.
В Django можно очень легко добавить RSS ленту для вашего сайта. Приступим к реализации.
Создание класса RSS ленты
Нам необходимо создать класс, который будет представлять RSS ленту на сайте. Для этого необходимо наследоваться от класса django.contrib.syndication.views.Feed.
Класс должен содержать несколько методов и атрибутов, которые задают основные параметры ленты. Создадим файл feeds.py в нашем приложении blog со следующим содержимым:
from django.contrib.syndication.views import Feed
from django.urls import reverse
from .models import Post
class LatestPostFeed(Feed):
title = "Мой блог на Django - последние записи"
link = "/feeds/"
description = "Новые записи на моем сайте."
def items(self):
return Post.objects.order_by('-update')[:5]
def item_title(self, item):
return item.title
def item_description(self, item):
return item.description
def item_link(self, item):
return reverse('post_detail', args=[item.slug])
В этом классе мы определяем основные атрибуты ленты, такие как заголовок (title), описание (description) и адрес (link). Метод items() возвращает последние 5 статей, отсортированные по дате публикации. Методы item_title(), item_description() и item_link() возвращают заголовок, описание и ссылку на записи.
После того, как мы создали класс для RSS ленты, вам необходимо создать URL-адрес, по которому лента будет доступна.
Добавьте следующую строку в главный файл urls.py вашего приложения:
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
from apps.blog.feeds import LatestPostFeed
urlpatterns = [
path('ckeditor/', include('ckeditor_uploader.urls')),
path('admin/', admin.site.urls),
path('feeds/latest/', LatestPostFeed(), name='latest_post_feed'), # New
path('', include('apps.blog.urls')),
path('', include('apps.accounts.urls')),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += [path('__debug__/', include('debug_toolbar.urls'))]
И последним делом добавим ссылку на ленты в шаблон, для этого в файл sidebar.html добавим следующий код в самый низ:
<a href="{% url 'latest_post_feed' %}">Подписаться на RSS ленту</a>
Запустим сервер и проверим работу. Мы видим что появилась ссылка на ленту.
Попробуем перейти на нее и мы увидим что у нас открылась RSS лента нашего блога.
Чтобы сделать ее читаемой, нам будет необходим любой RSS ридер. Попробуем добавить ленту.
Мы видим что наши записи успешно добавились.
И мы также можем открыть любую запись и прочитать ее.
Подписываясь на RSS-каналы всех интересных сайтов, пользователь сможет смотреть анонсы всех статей в хронологическом порядке и переходить только к тем, которые ему интересны. Так читатель сможет сформировать собственную ленту новостей всех сайтов, которые читает.