【问题标题】:Django feeding file data to a modelDjango 将文件数据提供给模型
【发布时间】:2020-12-29 14:46:55
【问题描述】:

如果您有一个要求用户上传文件的表单,并且经过一些预处理的文件会得到一个数据字典,该字典会被馈送到模型中。在这种情况下如何进行预处理步骤?在子类 FormView 的 is_valid 方法中,可以执行 form.files 来获取文件 obj,读取它,在那里对其进行预处理,然后将数据提供给模型实例。但我认为这会阻塞线程。正确的方法是什么?

【问题讨论】:

  • 我已经使用 Celery 将其移交给另一个进程,以免将 html 呈现给用户,但我希望有人回答如何在新的异步中执行此操作意见。
  • 如果处理时间过长,您可以使用 celery 任务进行异步处理。 docs.celeryproject.org/en/stable/django/…

标签: python django


【解决方案1】:

从 Django 3.1 开始,你可以做这样的事情

import asyncio
from django.http import JsonResponse
from asgiref.sync import sync_to_async


@sync_to_async
def crunching_stuff(my_file):
    # do your file processing here
        
async def index(request):
    json_payload = {
        "message": "Your file is being processed"
    }
    my_file = request.POST.get('file')
    
    asyncio.create_task(crunching_stuff(my_file))
    return JsonResponse(json_payload)

【讨论】:

  • 感谢您的帮助。但是在基于类的视图的情况下,什么是 async ?我应该在哪个函数中添加async 关键字?
  • 好的,我得到了答案stackoverflow.com/questions/62038200/…
  • 我刚刚意识到的另一件事是有两个阻塞阶段,一个是文件上传时,另一个是文件正在预处理时。为了使文件上传异步,应该使什么异步?
  • 你可以在前端使用 websockets 或 ajax
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 2018-08-22
  • 2017-08-30
  • 2020-02-19
  • 1970-01-01
  • 2021-05-18
相关资源
最近更新 更多