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.