小编Pau*_*rov的帖子

Django:批量上传并确认

还有一个关于风格和良好实践的问题。我将展示的代码可以工作并执行功能。但我想知道它是否可以作为解决方案,或者它可能太丑陋了?

由于问题有点晦涩难懂,我最后再给出一些观点。

那么,用例。

我有一个包含这些物品的网站。有一个按用户添加项目的功能。现在我想要一个通过 csv 文件添加多个项目的功能。

应该如何运作?

  1. 用户转到特殊上传页面。
  2. 用户选择 csv 文件,单击上传。
  3. 然后他被重定向到显示 csv 文件内容的页面(以表格形式)。
  4. 如果用户可以,他单击“是”(具有“confirm_items_upload”值的按钮),文件中的项目将添加到数据库中(如果可以)。

我已经看到了 django 批量上传的例子,它们看起来很清楚。但我没有找到带有中间“验证确认”页面的示例。那么我是怎么做到的:

  1. views.py中:上传csv文件页面的视图
def upload_item_csv_file(request):
    if request.method == 'POST':
        form = UploadItemCsvFileForm(request.POST, request.FILES)
        if form.is_valid():
            uploaded_file_name = handle_uploaded_item_csv_file(request.FILES['item_csv_file'])
            request.session['uploaded_file'] = uploaded_file_name
            return redirect('show_upload_csv_item')
    else:
        form = UploadItemCsvFileForm()
    return render(request, 'myapp/item_csv_upload.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)
  1. 在utils.py中:handle_uploaded_item_csv_file - 只需保存文件并返回文件名
def handle_uploaded_item_csv_file(f):
    now = datetime.now()
    # YY_mm_dd_HH_MM
    dt_string = now.strftime("%Y_%m_%d_%H_%M")
    file_name = os.path.join(settings.MEDIA_ROOT, f"tmp_csv/item_csv_{dt_string}.csv")
    with open(file_name, 'wb+') as destination:
        for chunk in f.chunks():
            destination.write(chunk)

    return f"tmp_csv/item_csv_{dt_string}.csv" …
Run Code Online (Sandbox Code Playgroud)

python django bulk django-views

6
推荐指数
1
解决办法
2365
查看次数

标签 统计

bulk ×1

django ×1

django-views ×1

python ×1