У меня есть сценарий, когда пользователь загружает некоторые данные, Django выполняет некоторую обработку в pandas и возвращает потенциально большой текстовый файл. У меня это работает, но я не уверен насчет масштабируемости подхода и хочу знать, есть ли лучший способ.
Адаптировал вывод в раздел CSV документа Django. У меня есть следующее:
class MyClass(LoginRequiredMixin,FormView):
template_name = 'myapp/mytemplate.html'
form_class = MyForm
success_url = '/' # Replace with your URL or reverse().
def post(self, request, *args, **kwargs):
if request.method == 'POST':
form = MyForm(request.POST, request.FILES)
#print("filename",files[0].name)
if form.is_valid() :
filename = "my-file.txt"
content = 'any string generated by django'
response = HttpResponse(content, content_type='text/plain')
response['Content-Disposition'] = 'attachment; filename={0}'.format(filename)
return response
else:
print("i am invalid")
return self.form_invalid(form)
На практике мне нужно будет вывести текстовый файл, возможно, из 1000 строк, построенный путем циклического перебора многочисленных фреймов данных. Должен ли я просто создать очень длинную текстовую строку (контент), или есть лучший способ? В чистом Python я больше привык к созданию вывода TXT-файла, используя:
f = open( 'some_file.txt', 'w+')
f.write("text")
f.write("text")
f.close()
Что кажется более интуитивным.
По просьбе комментариев, обновлен, чтобы показать именно тот код, который я пытался в Django, который возвращал пустой текстовый файл:
class MyClass(LoginRequiredMixin,FormView):
template_name = 'myapp/mytemplate.html'
form_class = MyForm
success_url = '/' # Replace with your URL or reverse().
def post(self, request, *args, **kwargs):
if request.method == 'POST':
form = MyForm(request.POST, request.FILES)
if form.is_valid() :
f = open( 'some_file.txt', 'w+')
f.write("text")
return FileResponse(f, as_attachment=True, filename='some_file.txt')