Как я могу динамически обслуживать файлы и затем загружать их в Django? - PullRequest
1 голос
/ 27 марта 2020

В настоящее время я работаю над проектом, который много работает с файлами iCalendar. Где после того, как пользователь ищет свое имя на моем веб-сайте, я хотел бы, чтобы у него была возможность добавить события, отображаемые в его телефонные календари. Я мог предположить, что это можно сделать, создав файл .ics. Когда пользователь щелкнет по нему, файл начнет загружаться на основе имени пользователя.

Итак, что я сделал до сих пор, это Django посмотреть, что при нажатии кнопки «Добавить в календарь» представление отображается. В этом случае представление просто запрашивает имя и получает его ics_string или данные календаря. Вот мнение, которое я написал до сих пор

def serve_calendar(request):
    name = request.GET.get('name', '')
    ics_string = get_calendar_details(name)

    #the portion of code that i can't figure out

    return response

Что мне не хватает - это как отправить этот файл для загрузки на компьютер клиента без необходимости создавать его на сервере. Я нашел некоторые ответы, используя io.StringIO и FileWrapeprs из библиотеки Django, но они не сработали для меня. Другие ответы, которые я нашел, используют X-SendFile, но это не будет работать для меня, так как для этого требуется путь к файлу, и я не хочу, чтобы файл создавался на сервере.

Я в настоящее время используется Python 3.7.4 64-разрядная с Django версия 2.2.7

1 Ответ

1 голос
/ 27 марта 2020

Вы можете указать тип носителя и добавить заголовок Content-Disposition для ответа:

from django.http import HttpResponse

def serve_calendar(request):
    name = request.GET.get('name', '')
    ics_string = get_calendar_details(name)
    response = HttpResponse(ics_string<b>, content_type='text/calendar'</b>)
    response[<b>'Content-Disposition'</b>] = 'attachment; filename=calendar.ics'
    return response
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...