私は今まで何時間も単純なテキストファイルをアップロードしようとしていましたが、それでも動作するようには見えません。
「file_source」が欠落していると言って、無効なフォームを取得し続けます。
「file_source」が投稿されないのはなぜですか?
「file_source」を実際に送信することもできましたが、まだ見つからないと表示されます。 Django FileFiled?
Djangoフォーム:
class FileUploadForm(forms.Form):
file_source = forms.FileField()
Djangoテンプレート(レンダリングフォーム):
<form action="/upload/" method="post" id="file-upload-form" enctype="multipart/form-data"> {% csrf_token %}
{{ form }}
<button type="submit" class="btn btn-primary" id='upload-btn'>Upload</button>
</form>
JQuery/Ajaxアップロード:
function uploadFile() {
$.ajax({
data: $(this).serialize(),
type: $(this).attr('method'),
url: $(this).attr('action')
});
return false;
}
$(function() {
$('#file-upload-form').submit(uploadFile);
});
POSTを受信するDjangoビュー:
def upload_view(request):
if request.is_ajax():
form = FileUploadForm(request.POST)
if form.is_valid():
print 'valid form'
else:
print 'invalid form'
print form.errors
return HttpResponseRedirect('/ingest/')
これが動作するように変更したものです。
FormDataを使用して、フォームからデータをパッケージ化しました
Djangoビューでフォームのパラメーターに注意してください。以前は「ファイル」を指定していなかったため、「ファイルフィールドが必要です」エラーが発生しました。
Javascript:
function upload(event) {
event.preventDefault();
var data = new FormData($('form').get(0));
$.ajax({
url: $(this).attr('action'),
type: $(this).attr('method'),
data: data,
cache: false,
processData: false,
contentType: false,
success: function(data) {
alert('success');
}
});
return false;
}
$(function() {
$('form').submit(upload);
});
ジャンゴビュー:
def upload_view(request):
if request.method == 'POST':
form = FileUploadForm(data=request.POST, files=request.FILES)
if form.is_valid():
print 'valid form'
else:
print 'invalid form'
print form.errors
return HttpResponseRedirect('/ingest/')
Ajax to Djangoを使用して、ファイルに加えてjsonデータを送信する方法は次のとおりです。
例:
フォームデータを使用したJS
var formData = new FormData();
formData.append('file1', myFile);
const data_ = JSON.stringify(data)
formData.append('data', data_);
doPost(url, formData)
.then(result => {
})
Request.FILESとrequest.POSTを使用したDjango
data = json.loads(request.POST.get('data'))
files = request.FILES
attached_file1 = files.get('file1', None)
attr1 = data.get('attr1', None)