RSS、Atom和Feed概念与实现(django)

简介

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 NewsItem

class 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.title

    def 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 LatestEntriesFeed

urlpatterns = [
    # ...
    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 Atom1Feed

class 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 Atom1Feed

class 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, AtomSiteNewsFeed

urlpatterns = [
    # ...
    url(r'^sitenews/rss/$', RssSiteNewsFeed()),
    url(r'^sitenews/atom/$', AtomSiteNewsFeed()),
    # ...
]

参考自:刘江的博客教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
个人博客是一个展示个人想法和创意的平台,设计与实现一个个人博客需要考虑到用户界面的美观性、功能的完善性和性能的稳定性。借助django这一开源的web应用框架,可以很好地实现个人博客的设计与实现。 首先,个人博客的界面设计需要简洁美观,用户体验良好。通过django的模板语言和静态文件的管理,可以实现页面的定制化,包括布局、配色和交互效果等。其次,博客的功能需要考虑文章的发布、编辑和删除,评论的添加与管理,用户的注册、登录和个人信息管理等。django提供了丰富的模型和视图功能,可以轻松实现这些功能,并且通过ORM对象关系映射库,实现数据的存储和管理。最后,博客的性能需要考虑网站的访问速度、稳定性和安全性。django自带的缓存系统、用户认证系统和安全框架,可以很好地保障网站的性能和安全。 在实现个人博客的过程中,还可以借助django的插件机制,如django-rest-framework、django-crispy-forms等,来进一步扩展博客的功能和提升用户体验。同时,django的文档齐全,社区活跃,也有众多开发者分享的教程和案例,可以帮助我们更好地学习和实践个人博客的设计与实现。 总之,借助django这一强大的web框架,可以很好地设计与实现个人博客,满足用户的需求,展示个人的创意和想法,并且为读者提供一个良好的阅读和交流空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩波的笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值