django无法上传文件?

几乎全部都是按照官方文档来的不知道为什么会fail?根据下面的报错信息可以看出是form不合法。参考的官方文档

这是上传文件的表单

class UploadFileForm(forms.Form):

    file = forms.FileField()

这是views.py的处理函数

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['file'])
            return HttpResponse('success')
        else:
            return HttpResponse('failed')
    else:
        form = UploadFileForm()
        return render(request, 'backend/upload.html', {'form': form})


def handle_uploaded_file(f):
    with open('some/file/name.txt', 'wb+') as destination:
        for chunk in f.chunks():
            print 'write successfully'
            destination.write(chunk)

这是upload.html

<form action="{% url 'backend:upload' %}" method="post">
    {% csrf_token %}
    {{ form }}
    <button type="submit">Submit</button>
</form>

图片描述

但是总是fail,为什么这里form不合法呢?
图片描述

阅读 4.5k
1 个回答

如果需要上传文件,需要在表单中指定 enctype="multipart/form-data" 属性,把表单改为:

<form action="{% url 'backend:upload' %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form }}
    <button type="submit">Submit</button>
</form>

请仔细阅读文档内容,其中有提及这一点。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题