Django 预加载 Yelp API 结果

Posted

技术标签:

【中文标题】Django 预加载 Yelp API 结果【英文标题】:Django preload Yelp API results 【发布时间】:2017-11-28 10:15:07 【问题描述】:

我正在为一家餐厅创建一个网站,他们想展示他们的 Yelp 评论。我配置并可以使用 Yelp API 检索数据。我必须查询两件事才能得到我需要的东西。总而言之,这意味着页面需要 10 到 15 秒才能加载,而且我不想每次有人想要查看页面时都查询 Yelp API。

yelp_api = YelpAPI('secretkey1', 'secretkey2')
business_results = yelp_api.business_query(id='secretbuisness', location='secretplace')
reviews_results = yelp_api.reviews_query(id='secretbuisness', location='secretplace')
return render(request, 'reviews.html', 'reviews_results': reviews_results, 'business_results': business_results)

有什么方法可以让我将 Yelp API 数据与页面请求分开并将其存储在某个地方以供使用,也许每 5-10 分钟更新一次?

【问题讨论】:

【参考方案1】:

当然,您可以使用后台任务来执行此操作。

    选择一个后台任务 django 应用程序:

    Django Background Tasks(设置简单,使用方便,功能不是很丰富,但可以解决您的问题) Celery(功能丰富、高级设置、高级使用)

    为结果制作模型以将它们存储在数据库中

    每隔一小时左右在后台任务中发出一个 api 请求,并将结果存储在您创建的模型中。 在 html 中显示模型的结果。

或者,您可以使用 ajax (javascript) 在 html 中异步执行此操作。 因此,在要显示结果的页面上,您可以使用 javascript 向 rest api of yelp 发出 ajax 请求,并使用 handlebars 或其他 javascript 渲染引擎之类的东西渲染整个数据。如果混合使用 javascript 模板引擎和 django 模板语法,请注意,因为 django 可能会渲染 javascript 模板。因此,这是解决方案:How to escape or in django template?

【讨论】:

以上是关于Django 预加载 Yelp API 结果的主要内容,如果未能解决你的问题,请参考以下文章

编辑时的 Django FormWizard 预填充

使用“预加载”链接指令在 Chrome 中预加载字体

加载执行预编译的Sql :prepareStatement

NSBundle 中预加载内容的 iOS 存储问题以及来自 API 的增量更新

如何预加载网络工作者资产

选择 searchBar 时在 UISearchController 中预加载数据