Иногда возникают ситуации когда в ответ на запрос в браузере необходимо вернуть файл. Наверное возможно написать, какое нибудь изящное решение используя 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