简介

Atom 提要与 RSS 提要非常相似,因为它是一种轻量级的 XML 格式,可以轻松地联合 web 内容。事实上,大多数 RSS 阅读器和新闻聚合器都能够很好地阅读 Atom 提要,因为它正在成为广泛使用的 RSS 提要替代品。

RSS

  • 通过使用 RSS,您可以有选择地浏览您感兴趣的以及与您的工作相关的新闻。

  • 通过使用 RSS,您可以把需要的信息从不需要的信息(兜售信息,垃圾邮件等)中分离出来。

  • 通过使用 RSS,您可以创建自己的新闻频道,并将之发布到因特网。

参考:RSS 简介

什么是“feed” ?

对于那些不熟悉联合提要(如 Atom 提要、 RSS 提要或 RDF 提要)的人来说,它们是提供网站内容信息的小型文本文件。当内容被更新时,提要文本文件也会被更新,无论是手动更新还是程序更新。名为“阅读器”或“聚合器”的应用程序可以检查这些小文本文件,并在有新内容时通知别人。

如果您已经有了 RSS 提要,那么创建 Atom 提要非常简单。这两种格式之间的主要区别(从开发人员的角度来看)是所使用的 XML 标记。有关 Atom 规范的更多信息,以及有关所需标记和可用标记的信息,可以参考 Atomenabled.org。

Django提供了一个高层次的聚合内容框架,让我们创建RSS/Atom变得简单,你需要做的只是编写一个简单的Python类。

范例

要创建一个feed,只需要编写一个Feed类,然后设置一条指向Feed实例的URLconf就可以了,非常简单,下面是一个示例,演示了某站点的最近五条新闻记录:

from django.contrib.syndication.views import Feed
from django.urls import reverse
from policebeat.models import NewsItemclass LatestEntriesFeed(Feed):title = "Police beat site news"link = "/sitenews/"description = "Updates on changes and additions to police beat central."def items(self):return NewsItem.objects.order_by('-pub_date')[:5]def item_title(self, item):return item.titledef item_description(self, item):return item.description# item_link is only needed if NewsItem has no get_absolute_url method.def item_link(self, item):return reverse('news-item', args=[item.pk])

要设置链接这个feed的URL,只需要将这个Feed类的实例,作为参数,加入URLconf,如下所示:

from django.conf.urls import url
from myproject.feeds import LatestEntriesFeedurlpatterns = [# ...url(r'^latest/feed/$', LatestEntriesFeed()),# ...
]

注意:

  • 新建的Feed类继承于django.contrib.syndication.views.Feed。

  • title、link和description属性分别对应标准RSS的、和元素。

  • items()方法简单地返回此Feed需要包含的对象,列表形式。

  • 如果你要创建一个Atom feed,而不是RSS feed,使用subtitle属性替代description。
    还有一件事要做。在一个 RSS feed中,每一个<item>都有一个<title>, 和<description>, 我们需要告诉框架往这些对象里放入哪些数据。

  • 对于 <title> 和<description>,Django将尝试调用Feed类中的item_title()和item_description()方法。 这两个方法都会被传入一个参数:item,也就是对象自己。

  • 对于<link>,Django首先会尝试调用item_link()方法,如果该方法不存在,则使用对象的ORM模型中定义的get_absolute_url()方法。

指定feed类型

默认情况下,使用RSS 2.0类型,如果要指定类型,在Feed类中添加feed_type属性,如下所示:

from django.utils.feedgenerator import Atom1Feedclass MyFeed(Feed):feed_type = Atom1Feed

目前可用的类型有下面三种:

  • django.utils.feedgenerator.Rss201rev2Feed (RSS 2.01. Default.)
  • django.utils.feedgenerator.RssUserland091Feed (RSS 0.91.)
  • django.utils.feedgenerator.Atom1Feed (Atom 1.0.)

同时发布Atom和RSS feeds

要同时发布这两者,很简单,为你的Feed类创建一个子类,并且将其feed_type设置为你需要的类型,最后添加一条URLconf就可以了,如下所示:

from django.contrib.syndication.views import Feed
from policebeat.models import NewsItem
from django.utils.feedgenerator import Atom1Feedclass RssSiteNewsFeed(Feed):title = "Police beat site news"link = "/sitenews/"description = "Updates on changes and additions to police beat central."def items(self):return NewsItem.objects.order_by('-pub_date')[:5]# 增加下面的子类
class AtomSiteNewsFeed(RssSiteNewsFeed):feed_type = Atom1Feed # 修改类型subtitle = RssSiteNewsFeed.description

增加路由:

from django.conf.urls import url
from myproject.feeds import RssSiteNewsFeed, AtomSiteNewsFeedurlpatterns = [# ...url(r'^sitenews/rss/$', RssSiteNewsFeed()),url(r'^sitenews/atom/$', AtomSiteNewsFeed()),# ...
]

参考自:刘江的博客教程

RSS、Atom和Feed概念与实现(django)相关推荐

  1. 订阅基础:RSS、ATOM、FEED、聚合、供稿、合烧与订阅

    很多网友对这类名词概念非常陌生,如果没用过FEED订阅,肯定还会对诸多网站显示的FEED聚合.订阅.ATOM等等非常郁闷,虽然这几个名字间的很多并非并列关系,天缘只是有意把它们放到一起,方便对比参考, ...

  2. rss订阅神器inoreader与rss制作网站Feed DIY

    inoreader使用: https://blog.csdn.net/qq_29109181/article/details/77732165 任意网站rss制作: 不是所有网站都有订阅源的,下面使用 ...

  3. 原生体验!老牌 RSS 阅读器:NetNewsWire

    NetNewsWire 5是mac上一款功能强大的开源RSS阅读器,这款软件在新闻订阅器也算是元老级别的了,新版将支持 RSS, Atom, JSON Feed, RSS-in-JSON 协议,需要在 ...

  4. kali扫描工具--vega

    Vega是一个免费的开源扫描和测试平台,用于测试Web应用程序的安全性.Vega可以帮助您查找和验证SQL注入,跨站点脚本(XSS),泄露的敏感信息以及其他漏洞.它基于Java编写,基于GUI,可在L ...

  5. PHP RSS/Feed 生成类库(支持RSS 1.0/2.0和ATOM)

    通用PHP RSS/Feed 生成类库(支持RSS 1.0/2.0和ATOM) PHP Universal Feed Generator (supports RSS 1.0, RSS 2.0 and ...

  6. RSS,Feed和抓虾_转

    以下是和菜头同学对RSS.FEED.订阅.抓虾等概念及应用的一些通俗易懂的阐述,帮助大家更好地理解和应用.全文转载如下: 今天,我博客的FEED订阅人数超过了10K.我不曾经在我的博客点击超过100万 ...

  7. 15个最佳jQuery RSS Feed读者

    长期以来,RSS一直是获取任何网站或博客的最新更新的最简单方法. 这些更新包括标准格式的全部或摘要文本,例如博客条目,新闻标题,音频和视频. 在今天的帖子中,我们向您介绍15种最佳jQuery RSS ...

  8. “全能”选手—Django 1.10文档中文版Part1

    欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com ### 主要分享Python 及Django教程以及相关的博客 本文是博主翻译的Django1.10 ...

  9. Django 1.8.2 文档

    django 百科全书 入门¶刚开始学习Django或者编程?让我们从这里开始吧! 从零开始: 概述 | 安装 教程: 第1部分:模型(100%) | 第2部分:管理站点(100%) | 第3部分:视 ...

最新文章

  1. -bash: sz: command not found
  2. [vue-cli]vue-cli怎么解决跨域的问题?
  3. 国内外软件开发上的差距与分析
  4. 解决Error #15: Initializing libiomp5.dylib, but found libomp.dylib already initialized.
  5. python列表生成式内必须定义匿名函数_Python基础-----基础概念总结
  6. portainer MySQL_portainer
  7. FLEX常用验证控件
  8. LeetCode(821)——字符的最短距离(JavaScript)
  9. 电脑故障扫描修复软件_非常时期不出门,自己在家修电脑,三例常见电脑故障排除方法。...
  10. php js多语言切换,php简单实现多语言切换的方法_php技巧
  11. 16.淘宝的架构演化案例
  12. 一文看懂 9 种Transformer结构!
  13. JAVA-idea中maven配置
  14. 安装skimage库(ModuleNotFoundError: No module named 'skimage')
  15. extractor pck_使用Pazera Free Audio Extractor从视频文件中提取音频
  16. 一个茴字有三种写法——吐槽C#9.0的Records
  17. WINDOWS 7 X64专业版SP1后续补丁包20150901(微软官方下载地址列表)
  18. SMAP_SSS_ L2c、L3_V04.0.n 文件下载途径(一键同时下载多个数据~)
  19. 基于JavaWeb的个人空间个人网站个人博客系统设计与实现
  20. 傅里叶变换中,圆频率w与频率f之间的公式转化

热门文章

  1. ubuntu18.04管理redis
  2. 【转】数据安全优秀思想
  3. leetcode 整数反转
  4. KNN-K最近邻算法+实例应用
  5. 【C语言】利用递归函数求n的阶乘
  6. 终端zsh_只需七个步骤,即可使您的“ ZSH”终端站起来—直观指南
  7. linux中的medium_如何在freeCodeCamp Medium出版物中发布
  8. python 3d游戏记录路径_基于osg的python三维程序开发(五)------沿路径运动
  9. MATLAB安装机器人学工具箱
  10. LeetCode题 - 1 两数之和