1

我正在寻找一种从使用 Django 构建的网页上传文件的方法,但使用 django 表单,即from django import forms.

为什么?只是因为我无法理解为什么我们需要这样的东西。我很确定可以处理通过表单上传的文件,就像我们可以处理通过表单提交的其他 POST 数据一样。

作为旁注,如果有人能告诉我使用 django 表单背后的逻辑,我将不胜感激。谢谢!

4

1 回答 1

0

每个文档:https ://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.FILES

如果请求包含文件上传,request.FILES 将包含 UploadedFile 类的实例,允许您读取从客户端收到的数据。


通常,您应该使用 Django Forms,因为它们使维护依赖它们的表单和视图变得更简单。当然,如果您的表单将只包含一个字段,一开始它可能看起来有点矫枉过正,但不用担心,最终,在视图中自定义表单验证和清理的两行代码要小得多(因此更容易维护)永远是。

最大的好处是关注点分离:因为你的表单是独立的类,它可以被多个视图重用,也可以使用 Python 的继承轻松扩展,并且可以与视图分开测试。

这也以相反的方式起作用,因为所有表单的创建和验证逻辑都位于其他地方,从而使您的视图更易于理解。

一旦你学会了表单 API,用 Django 方式编写表单最终会比直接从视图中处理 request.POST 更快、更简单。Django 表单为您处理传入数据并执行基本的清理和验证以及类型强制。如果没有它们,您将不得不自己花时间编写用于表单清理、验证和错误处理的样板。

Django Forms 还提供了“钩子”,用于在验证和清理数据时将额外代码挂接到表单,从而允许您在字段接收值时做额外的事情。甚至还有 model.Form 允许您从模型生成表单,从而为您节省更多时间。

感谢 Django Forms,您可以专注于

当我们在这里时,您还应该阅读以下内容: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/ https://docs.djangoproject.com/en/dev/topics /http/decorators/#django.views.decorators.http.require_POST

这些是必须知道的,以保护您的表单免受基本类型的攻击。

于 2013-04-17T02:09:12.670 回答