我需要从Google日历中提取事件,以便在使用Django构建的网站上展示它们。我不确定这样做的最佳方法是什么,但我相信应该缓存数据(我的网站/应用程序今天不使用任何缓存)。
因为我不需要事件存档,所以我想避免使用db。
这是我正在考虑的方法:
对于改进程序或部分程序的建议表示赞赏。
更新:我考虑过使用JavaScript,但如果API关闭,数据将无法使用。但如果这被认为是一个可以接受的解决方案,我将不得不更多地考虑它。
答案 0 :(得分:1)
我的方法是通过进行ajax调用和gdata客户端库的javascript版本来避免缓存。
是否有“iCalendar”的功能(这是一个用于操作此类数据的python模块吗?)你无法使用javascript进行复制?
这种方法可以节省存储和处理,并且很可能为您提供响应最快的网站。
答案 1 :(得分:1)
我同意@ marr75,因为你可以使用JavaScript实现你想做的事情(参见Google的JavaScript page for the GCal API)。
一种解决方案是编写自己的custom management command来填充Django的low level cache,然后在模板中使用这些变量。然后,您可以将此管理命令设置为定期运行作为cronjob以保持数据新鲜。您不必缓存单个变量 - 您可以始终缓存使用iCalendar构建的整个HTML块(我假设它是this)。
如果你详细了解它是什么,那么我可以给出一个比这更有帮助的答案。另外,您可能还想看看Django的per-view cache decorator。
编辑:示例可能如下所示:
from django.core.cache import cache
# Generate HTML block to cache
html = '<div>Calendar</div>'
# Cache the HTML as 'google_calendar'
cache.set('google_calendar', html, 3600)
然后在您看来,您可以将缓存的HTML传回给它:
from django.shortcuts import render_to_response
from django.core.cache import cache
def home(request):
data = {
'gcal': cache.get('google_calendar')
}
return render_to_response('home.html', data)