Django를 사용하여 유효한 iCal 스트림을 생성하는 데 문제가 있습니다.Django를 통해 제공되는 iCal 피드가 인식되지 않습니다.
내가 갖고있는 문제는 내 iCal 파일과 스트림이 유효하다는 것입니다. 스트림 URL을 방문하여 .ics 파일을 다운로드하여 유효성을 검사하고, iCalendar 또는 Google 캘린더로 가져올 수 있습니다. 사실, 장고 서버의 정적 파일과 동일한 .ics 파일을 호스트하고 구독하면 Google 캘린더의 정적 URL에도 제대로 작동합니다. 그러나 Google 캘린더에 피드 URL을 제공하면 운이 없게됩니다.
스택 오버플로 및 Google 검색시 비슷한 질문이 많이 제기되었지만 대부분의 경우 정확히 반대되는 문제가 있습니다 (파일이 작동하지 않거나 스트림 또는 스트림이 가끔씩 만 작동 함). 가장 좋은 예는 그들이 제공하는 예제 코드에서 알 수 있습니다. 비슷한 것을하고 있지만 피드가 작동하지 않아 뭔가 빠져 있어야합니다.
다음은 .ics 파일의 내용입니다.
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Tester//Version 0.0.1//EN
BEGIN:VEVENT
SUMMARY:iCal Timed
DTSTART:20140408T202000Z
DTEND:20140408T202000Z
DTSTAMP:20141107T153835Z
UID:event_1
DESCRIPTION:iCal Comment
END:VEVENT
BEGIN:VEVENT
SUMMARY:iCal All Day
DTSTART;VALUE=DATE:20140408
DTEND;VALUE=DATE:20140409
DTSTAMP:20141107T153835Z
UID:1
DESCRIPTION:iCal Comment
END:VEVENT
END:VCALENDAR
나는 쟝션 1.7.3을 사용하는 Django 1.7을 사용하고 있으며, 아래는 피드 생성에 사용 된 코드입니다.
def ical_feed(request):
cal = icalendar.Calendar()
cal.add('prodid', '-//Tester//Version 0.1.1//EN')
cal.add('version', '2.0')
for e in Event.events.filter(user_id=request.user.pk).iterator():
event = icalendar.Event()
event['uid'] = unicode(e.pk)
...
cal.add_component(event)
stream = cal.to_ical()
response = HttpResponse(stream, content_type='text/calendar; charset=utf-8')
response['Filename'] = request.user.username + '.ics'
response['Content-Disposition'] = 'attachment; filename=' + request.user.username + '.ics'
return response
이것은 중요하지 않지만 Django는 Apache 2.4.7 (Ubuntu)을 통해 제공됩니다. Content-Type을 HttpResponse에 설정하는 것 외에 독자가 이것을 스트림으로보기 위해 아파치에서해야 할 일이 있습니까? 나는 장고 ical에 대해 들어 봤고, 내가하고있는 일에 대한 오버 헤드의 불필요한 양처럼 보였고, 코드를보고 나는 이미하고있는 것과 같은 방식으로 헤더로 응답을 설정했다.
어떤 통찰력이라도 대단히 감사하겠습니다.
UPDATE 나는 내 피드에서 항목에 대한 식별자 간단했다 생각 UID를 오해. 그러나 그 문제는 해결되지 않았습니다. 질문을 더 명확히하기 위해 iCal 피드 유효성 검사기, iCalendar 또는 Google 캘린더에서 내 캘린더에 액세스하려고 할 때 '실패한 iCal 인증'오류로 만났고 캘린더의 크기는 항상 0 바이트였습니다.
CURL에 대한 Jerry의 제안은 바로 적용됩니다. 내가 발견 한 것은 약간 당황스러운 것이었지만 코드 장의에 초점을 맞추어 장고 뷰 레벨 기능을 수행하지는 못했다. URL을 CURL하면 사용자가/login 페이지로 리디렉션 되었기 때문에 0 바이트가 반환 된 것으로 나타났습니다. 뷰에 @login_required 데코레이터가 있습니다.
대단히 고맙습니다. 솔루션을 찾을 필요가있는 디버깅을 제공 할 때 답변을 올바르게 표시했습니다. 제리.
'UID'를 좀 더 고유하게 만들어야합니다. '1'은 전 세계적으로 고유 한 ID에 대한 끔찍한 선택입니다. – Evert