【问题标题】:Clicking button without uploading file单击按钮而不上传文件
【发布时间】:2019-09-19 15:14:16
【问题描述】:

我有一个 html 表单,用户可以上传文件,但是如果用户直接点击提交按钮而不上传任何文件,django 会出错。我该如何控制这个问题?

上传.html

    <!-- Upload form. Note enctype attribute! -->
    <form method="post" enctype="multipart/form-data" multiple>
        {% csrf_token %}
        <input type= "file" name ="docfile" multiple/>

        <button id="yukle" type="submit" value="Upload">
            <img src="/static/img/upload.png" width=28 height=30 alt="Yükle"/>
        </button>
    </form>

views.py

def SenetList(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            dosya_tipi = "Senet"
            context = upload(request.FILES.getlist('docfile'),form, dosya_tipi)
            return render(request, 'operations/upload.html', context)
    else:
        form = DocumentForm()
        return render(request, 'operations/upload.html', {'form': form})

forms.py

class DocumentForm(forms.Form):
    docfile = forms.FileField(
        label='Select a file',
        help_text='max. 42 megabytes'
    )

我给出了这样的错误:

/upload/senet 处的值错误

视图 operations.views.SenetList 未返回 HttpResponse 对象。它返回 None 。

【问题讨论】:

  • 这个模板是渲染前还是渲染后?
  • 我不能完全理解你的问题。你能解释一下吗? @Moha369
  • 渲染前:{{ form }},渲染后:{{&lt;form method = "POST"&gt; ... &lt;/form&gt;}}
  • 在渲染之前我会说,看看 csrf 的东西
  • 如果您在 HTML 中创建表单,那么为什么要在 forms.py 中创建表单?或者如果你有一个 python 表单,为什么要创建 html?

标签: html django forms


【解决方案1】:

如果方法是 post 并且表单无效,则隐式返回 None。这会导致错误。实现对表单无效的方法 post 的响应

【讨论】:

  • 如果它无效,它甚至不会被提交
  • 嗯......现在无法在我的手机上进行测试,但在 upload.html 中没有呈现给定的表单,而是手动编码的表单与服务器端验证不完全匹配:不需要,多个文件模板中的字段,但不在表单中。
  • 一般情况下,您不能说没有提交无效表单,请注意服务器端验证。
  • 您可以尝试提交无效的表单:)
  • 问问自己为什么在 django 中有一个 form.is_valid 方法;) 客户端验证不是您需要关心的唯一动物...进一步阅读:docs.djangoproject.com/en/2.2/ref/forms/validation
猜你喜欢
  • 2017-11-08
  • 2011-03-24
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多