提交前验证 Django 表单字段

问题描述 投票:0回答:1

Django 表单有 file 字段和 clean_file 方法。

class UploadFileForm(forms.Form):
    file = forms.FileField()

    def clean_file(self):
        ...

还有一个名为“应用”的按钮

我想在选择文件时验证该文件,如果验证成功,我将单击“应用”按钮,该按钮将发送带有此文件的发布请求。

但我不明白如何在提交文件之前验证文件,或者我应该使用表单到表单中。

或者它将有两种形式,但是如何在它们之间扔一个文件

django django-views django-forms
1个回答
0
投票

我使用的策略是暂时保存文件,以便它在请求之间持续存在。假设您提到的验证是手动的,例如在通过“应用”按钮提交到数据库之前预览文件内容,那么这种方法涉及两个单独的请求。

该过程类似于:

  1. 使用接受文件上传的表单创建视图。
  2. 在视图的POST处理中,将文件保存到文件系统或其他存储层(由于运行多个服务器,我使用S3)。您可以使用 Django 的内置验证在此处进行一些健全性检查,例如检查文件扩展名或查看格式。
  3. 从文件上传 POST 请求重定向不同的视图,例如带有“应用”按钮的表单的视图。
  4. 在此视图中,从刚刚用于存储该文件的任何路径/后端打开该文件。
  5. 读取文件并将内容放入Python数据结构中。我的用例主要涉及解析 CSV 文件。
  6. 像视图、上下文和/或表单中的任何其他 Python 变量一样使用。根据数据的不同,您可以使用 Django
    initial
    对象的
    Form
    属性/参数从文件内容读取的数据填充表单。
  7. 完成后清理(或归档到长期存储层)上传的文件。

如果您的验证过程是自动化的,则 HTTP 请求/响应的无状态性质仍然是关键概念。如果您不将文件保留在内存之外,那么一旦验证向浏览器发出 HTTP 响应,该文件就会基本上消失。

© www.soinside.com 2019 - 2024. All rights reserved.