我已经使用 Django Rest Framework 构建了一个 API,以提供来自我的 django 模型的 ical 提要。提要内容经过验证,可在我测试过的所有日历应用程序中运行,iOS 上的 iCal 除外。iOs 上的 iCal 将接受复制/粘贴的内容,但不接受从 url 导入。
我怀疑这个问题的原因是 http-header: transfer-encoding: chunked
我试图找出传输被分块的原因,并查看修复此问题是否允许 iOS 读取提要。
下面是一些简化的代码:
渲染器
from rest_framework import renderers
class ICALRenderer(renderers.BaseRenderer):
media_type = 'text/html'
format = 'ical'
charset = 'utf-8'
def render(self, data, media_type=None, renderer_context=None):
blob = tools.ical_generator(data, 'My calendar name', 'My calendar description')
return blob
tools.ical_generator
def ical_generator(events=[], calname='', caldesc=''):
cal = vobject.iCalendar()
# build header
# iterate over events
# build footer
icalstream = cal.serialize()
return icalstream
注意 1:在执行wget时,只会显示 ical_generator 的页眉和页脚,并且传输不会完成,而是无限期地“挂起”。
注意 2:该 API 还用于 ical feed 之外的其他目的,并且在其他情况下,http-header不会被分块。