我正在寻找一种从使用Django构建的网页上传文件的方法,但没有使用django表单即from django import forms
。
为什么呢?仅仅因为我无法理解为什么我们需要这样的东西。我很确定可以处理通过表单上传的文件,就像我们可以处理通过表单提交的其他POST数据一样。
作为旁注,如果有人能告诉我使用django表格背后的逻辑,我将不胜感激。 谢谢!
答案 0 :(得分:0)
每个文档:https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.FILES
如果请求包含文件上传,request.FILES将包含UploadedFile类的实例,允许您读取从客户端收到的数据。
通常你应该使用Django Forms,因为它们可以更简单地维护依赖它们的表单和视图。当然,如果你的表单只包含一个字段,一开始可能看起来有些过分,但不要担心,最终双线程远小于(因此更容易维护)自定义表单验证和清理视图永远都是。
最大的利润是关注点的分离:因为你的表单是单独的类,它可以被多个视图重用,它也可以使用Python的继承轻松扩展,并且可以从视图中单独测试。
通过保持您的视图更容易理解,这也是相反的方式,因为所有表单的创建和验证逻辑都位于其他地方。
一旦你学习了表单API,编写表单Django-way最终会比直接从视图处理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
为了保护您的表单免受基本类型的攻击,这些必须是必须的。