Dúvidas na geração de arquivos Excel.

Olá, estou tendo dificuldade de gerar um arquivo em Excel, após consulta no banco de dados. O arquivo gerado tem em média 159MB e está levando 30 segundos para que à página recarregue. Teria como fazer de forma assíncrona? Ou liberar a página para continuar navegando?

(English version further down)

(Esperando que o Google Tradutor não me falhe aqui)

Sim, você pode usar o Celery para iniciar uma tarefa em segundo plano para realizar esse trabalho. (O Django em si não suporta diretamente esse tipo de processamento - ele requer algum tipo de módulo adicional.) Essa tarefa em segundo plano então precisaria criar aquele arquivo em um local onde o usuário possa ir para recuperá-lo.

Dependendo de seus requisitos específicos, você também pode precisar resolver questões relacionadas a:

  • segurança (quem pode baixar o arquivo depois de criado?),
  • retenção (quanto tempo os arquivos permanecem antes de serem excluídos?),
  • notificação (informando à pessoa que o arquivo está pronto para download),
  • nomeação (o que acontece se dois usuários tentarem criar um arquivo com o mesmo nome?)
    e possivelmente outros problemas relacionados ao gerenciamento de arquivos.

(Hoping that Google Translate doesn’t fail me here)

Yes, you could use Celery to start a background task to perform that work. (Django itself does not directly support that type of processing - it requires some type of add-on module.) That background task would then need to create that file in a location where the user can go to retrieve it.

Depending upon your specific requirements, you may also need to address issues related to:

  • security (who can download the file after it has been created?),
  • retention (how long do the files stay before being deleted?),
  • notification (letting the person know the file is ready to download),
  • naming (what happens if two users try to create a file with the same name?)
    and possibly other file-management related issues.

Esclareceu um pouco minhas dúvidas.

Respondendo as suas observações, já havia pensando em algumas soluções.
O arquivo vai ficar disponível apenas para o usuário que fez a solicitação do mesmo.
Ele irá permanecer por no máximo 3 meses disponíveis para download.
Será enviado um e-mail quando o arquivo(tarefa) ficar disponível.
Além do usuário nomear um arquivo, vou usar um datetime para concatenar com o nome, ou seja, será praticamente impossível repetir nomenclatura.

Agora vou pesquisar a respeito para ver se consigo implementar.

Muito obrigado pelo retorno.