python - 在 feedparser 中使用 ETag

标签 python django feedparser

我正在编写一个 Django View ,用于获取 WordPress 系统的最新博客文章。

def __get_latest_blog_posts(rss_url, limit=4):
    feed = feedparser.parse(rss_url)
    return something

我尝试在终端中使用 ETags:

>>> import feedparser
>>> d = feedparser.parse("http://a real url")
>>> d.etag
u'"2ca34419a999eae486b5e9fddaa2b2b9"'
>>> d2 = feedparser.parse("http://a real url", d.etag)

我想避免为网络应用程序的每个用户请求提要。也许 etag 不是最好的选择? 第一个用户看到此 View 后,我可以存储 etag 并将其用于所有其他用户吗?是否每个用户都有一个线程,因此我无法以这种方式共享变量的值?

最佳答案

Etag 允许标记网络资源的唯一状态,以便您有机会请求表达您已有的最新状态的资源。

但是要在您的客户端上已有某个版本,您必须第一次获取它,因此对于第一个请求,使用 etag 无关。

参见HTTP Etag at wikipedia ,它解释了一切。

典型场景是:

  1. 首次获取您的页面并读取 Etag header 的值以供将来使用
  2. 下次请求同一页面时,您可以添加 header If-None-Match 以及上次获取的 Etag 值。服务器会检查,如果有新的东西,如果你提供的Etag和当前版本资源的Etag相同,它不会返回完整的页面,而是返回HTTP Status code 304 Not Modified 。如果页面在服务器上具有不同的状态,您将获得带有 HTTP 状态代码 200 的页面,并在响应 header 中包含新的 Etag 值。

如果您希望优化您的应用程序,不要为每个用户生成对同一 Feed 的初始请求,您应以某种方式在您的应用程序中全局共享给定资源的 Etag 值。

关于python - 在 feedparser 中使用 ETag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23560658/

相关文章:

python - feedparser 和谷歌新闻

python - 在 ForeignKey 上设置 unique=True 与使用 OneToOneField 具有相同的效果

python - 连接到 openstack 失败

django - 避免在 django post 方法中使用 csrf token

python - 如何使用 feed 解析器 python 解析 xml feed?

python - 从列表中提取值,格式类似于 Python 中的 JSON 文件

python - 在 Python pandas 中拆分和连接数据帧以使用 rpy2 进行绘图

python - 将 numpy 数组分解为具有相同值的较小数组 [Python]

django - 无法在 Django 的 DigitalOcean VPS 上使用 Nginx 提供静态服务

python - 如何正确应用 django/jinja2 模板过滤器 'escape' 和 'linebreaks'?