Django Создать и вывести текстовый файл из вида - PullRequest
0 голосов
/ 23 мая 2019

У меня есть сценарий, когда пользователь загружает некоторые данные, 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')


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...