django - Django从用户那里获取数据,离线处理以将CSV发送给用户
问题描述
我可能无法为您提供有关我尝试过的代码的任何信息。但是没有任何搜索或研究可以让我得到有效的结果。
我想做什么? 我有一个用户提交 CSV 文件的表单。该文件在后端处理以从数据库中检索数据。从 DB 恢复的数据再次以 CSV 格式写入并邮寄给用户。
此处理大约需要 5-10 分钟。因此,我想向用户显示您的工作正在进行中的消息,一旦完成,您将获得 CSV 文件。
我现在的代码。
def bulkserachpro(request):
with request.FILES['searchnum'] as csvfile:
spamreader = csv.reader(csvfile,dialect=excel)
next(spamreader)
a = []
b = []
for row in spamreader:
a.append((row[0]).upper())
data_list = nummodel.objects.filter(number__in=a)
csvfile = StringIO.StringIO()
csvwriter = csv.writer(csvfile)
csvwriter.writerow(['a','b'])
for data in data_list:
csvwriter.writerow([data.a,data.b])
message = EmailMessage("Hello","Your report","email@gmail.com",["emailto@gmail.com"])
message.attach('invoice.csv', csvfile.getvalue(), 'text/csv')
message.send()
return render(request,'bulkpro.html',messages.add_message(request, messages.SUCCESS,'File uploaded Succesfully.'))
这段代码完成了它的工作。但由于用户不能等待 5-10 分钟,他会收到超时错误消息。我应该在这里更改什么,以便用户收到以下消息,并且一旦处理完成,他就会收到带有附件的电子邮件。
收到您的文件,它将被处理并发送到您的邮件 ID。
解决方案
在视图中等待肯定会超时,任何解决问题的技巧都不是直截了当的。而是每隔一段时间进行 AJAX 调用以了解如下状态。
发布 CSV 后,启动一个 celery 任务来完成这项工作。
AJAX 查询任务的状态(之前调用中传递的任务 ID)以了解作业的状态。
相应地显示任务的完成或进度。
在 celery 任务中使用 CSV 发送电子邮件。
推荐阅读
- python - MySQL 表未在使用 Python 执行 LOAD DATA LOCAL 语句时更新
- openedge - 我可以根据变量的值命名临时表字段吗?
- flutter - StreamBuilder 未按预期从 Stream 读取数据
- json - 合并 2 个 chrome 扩展而不与 JS 文件和 URLS 冲突
- r - 计算R中多词的词频?
- javascript - React Native 视图没有在绝对定位的父容器内接收触摸输入?
- android - Gradle compileOnly 和 Maven 提供
- python - 尽管存在参数 y,但为什么会出现错误“TypeError: set_window_position() missing 1 required positional argument: 'y'”?
- find - ksh:如何获取按最近活动排序的所有“日志”目录?
- r - 将全局环境中的 R 对象组合成一个列表