Вернуть файл в FBV Django.

Иногда возникают ситуации когда в ответ на запрос в браузере необходимо вернуть файл. Наверное возможно написать, какое нибудь изящное решение используя CBV (функции основанные на классах), но я решил использовать для этих целей FBV(функции-представления).

Возвращать наша функция будет фай с разрешением .dbf, используя метод HttpResponse. Думаю более подробные комментарии излишни, код простой очень. И я выложу его, может кому нибудь и пригодится.

@login_required
def download_dbf(request, num_dbf):
    #Подключаемся на фтп серваер
    ftp = FTP('muftp.ru')
    ftp.login('user', 'password')
    ftp.cwd("nakl")
    ftp.cwd(request.user.username)
    #Загружаем файл
    dbf_name = str(num_dbf) + '.DBF'
    dbf_file = MEDIA_ROOT + '/ftp/' + request.user.username + '/' + dbf_name
    lf = open(dbf_file, "wb")
    ftp.retrbinary("RETR " + dbf_name, lf.write, 8 * 1024)
    lf.close()
    ftp.quit()

    fp = open(dbf_file, 'rb')
    response = HttpResponse(fp) #Важно открыть файл и только потом передать его в HttpResponse
    fp.close()
    response['Content-Disposition'] = 'attachment; filename=%s' % dbf_name
    return response

 

Добавить комментарий

Ваш e-mail не будет опубликован.