У меня возникли трудности с созданием допустимого потока iCal с использованием Django.iCal Подача через Django Не распознано
Проблема, с которой я столкнулся, заключается в том, что мой файл и поток iCal действительны. Я могу посетить URL-адрес потока, чтобы загрузить файл .ics и проверить его только, импортировать его в календарь iCalendar или Google Calendar просто отлично и т. Д. На самом деле, если я размещаю тот же файл .ics, что и статический файл на моем сервере Django, и подписаться на этот статический URL-адрес из Календаря Google, он также отлично работает. Однако, когда вы указываете Google Calendar 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
Я использую Django 1.7 с icalendar 3.8.3, а ниже - код, используемый для создания фида.
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, есть ли что-то, что мне нужно делать в Apache, чтобы заставить читателей видеть это как поток? Я слышал о django-ical, и кажется, что это лишний объем накладных расходов на то, что я делаю, и, глядя на его код, он устанавливает ответ с заголовками так же, как я уже делаю.
Любое понимание было бы весьма полезным.
UPDATE
я неправильно понял UID, полагая, что это просто идентификатор для элементов в моей подачи. Однако это не решило проблему. Чтобы прояснить этот вопрос, при попытке получить доступ к моему календарю с помощью проверки подлинности канала iCal, iCalendar или Календаря Google, меня встретила ошибка «сбой проверки iCal», и размер календаря всегда приводил к 0 байтам.
Предложение Джерри для CURL URL-адреса было правильным. То, что я нашел, было немного смущающим, но я был настолько сосредоточен на имплантации кода, что я никогда не доходил до функции уровня Django. CURLing URL-адрес показал, что были возвращены 0 байтов, поскольку пользователь перенаправлялся на страницу/login. У меня на представлении был обработчик @login_required.
Большое спасибо за вашу помощь, я правильно пометил ваш ответ, Джерри, поскольку он предоставил отладку, мне нужно было найти решение.
Вы должны сделать свой 'UID' немного более уникальным. '1' - это ужасный выбор для уникального глобального идентификатора. – Evert